• asp.net之一步一个脚印


      刚刚加入博客园这个大家庭,现在还未交到朋友.我是asp.net的初学者,刚好学了整整一个月,这次是对asp.net进行一次系统的学习和分析,有错误的地方还请大家帮忙更正,不甚感激!
      当我们新建一个站点的时候,如果使用默认模板的话,VS2008会自动产生一个Default.aspx窗体页.
      他的初始代码如下:
     
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        
    <title>Untitled Page</title>
    </head>
    <body>
        
    <form id="form1" runat="server">
        
    <div>
        
        
    </div>
        
    </form>
    </body>
    </html>
      我们首先来看看@Page这个指令,发现他包含4个属性:
      language : 指定页中所有内联呈现,代码声明块或者代码隐藏文件使用的编程语言.
    这里有必要说明下内联呈现,代码声明块和代码隐藏文件的区别.
    1.代码呈现块语法如下:
     <% 内联代码 %>
     
    <%= 内联表达式 %>
    举个例子: 
      
       <% Response.Write("hello"); %>
       
    <%= "hello" %>
    上面的效果是一样的,因为内联表达式是调用Response.Write的快捷方式.

    2.代码声明块
    代码声明块必须定义在<script>标记中,并且必须使用runat="server"属性标记.
    <script runat="server">
            
    // 代码在此 o(∩_∩)o哈哈
    </script>

    3.代码隐藏文件
    OK,也就是Default.aspx.cs

    我们接着看后面的属性,先来熟悉下CodeFile和Inherits属性吧...
    CodeFile指定页的代码隐藏文件
    Inherits指定页继承的代码隐藏类,我们打开代码隐藏文件Default.aspx.cs,就会看到这个类了,该类从Page类派生
    public partial class _Default : System.Web.UI.Page 
    {
        
    protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

    ok,继续... 我们重点讲讲AutoEventWireup属性.
    该属性默认情况下为true,那么到底有什么用呢,别急,待我具体说来...
    我们先打开Default.aspx.cs,写下如下代码:
    public partial class _Default : System.Web.UI.Page 
    {
        
    protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(
    "测试中,请勿打扰");
        }
    }

    右键点击Default.aspx,选择View in Browser
    这时应该显示测试中,请勿打扰...
    现在,我们把AutoEventWireup属性设置成false,右键点击Default.aspx,选择View in Browser,发现只是一个空白页.
    由此,我们可以推出,该属性是将Page对象和他的事件处理程序关联起来,相当于:
    Page.Load += new EventHandler(Page_Load);

    OK,我们现在只是简单地了解了这几个属性,接下来我们进入详细的分析阶段,准备好了吗,嘿嘿,去泡杯水,开始啦
    我们先在default.aspx页中加入如下代码:
    <div>
            
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
            
    <asp:Label ID="Label1" runat="server" Text='<%# DateTime.Now %>'></asp:Label>
        
    </div>
    对了,别忘了把AutoEventWireup属性设回true哦@@
    这里的<%# %>构造块是数据绑定表达式语法,将Text属性设置成DateTime.Now变量的值,然后在代码隐藏文件中进行绑定..
    然后在代码隐藏文件中加入如下代码:
     protected void Page_Load(object sender, EventArgs e)
        {
            DataBind();
        }
        
    protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(
    "早上好!");
        }
    当我们向服务器提交请求时,如果是第一次请求,则Page.IsPostBack=false,否则,说明是回发请求.当请求到达服务器时,asp.net首先确定是否要分析和编译该页面,然后再加载编译好的程序集.
    让我们来看看怎么把default.aspx转换成一个类,然后再编译成一个程序集吧?
    首先,在default.aspx窗体页的@Page指令中加入Debug="true"启用调试.
    进入asp.net临时文件夹下,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\
    进入你的解决方案目录,你会看到有两个文件夹:

    确定哪个文件夹是我们想要的,我们要分析的那个文件夹下面有好多文件.
    来到那个文件,你会看到有连续的三个类文件.
    就像:
    App_Web_XXXXXXX.0.cs
    App_Web_XXXXXXX.1.cs
    App_Web_XXXXXXX.2.cs
    我们先打开App_Web_XXXXXXX.0.cs
    这是我们的窗体页转换后的结果,其中包含了两个类:
    public partial class _Default : System.Web.SessionState.IRequiresSessionState {


      public class default_aspx : global::_Default, System.Web.IHttpHandler {
    先来看第一个类:
        
        
    #line 12 "F:\WebSite8\Default.aspx"
        
    protected global::System.Web.UI.WebControls.Button Button1;
        
        
    #line default
        
    #line hidden
        
        
        
    #line 13 "F:\WebSite8\Default.aspx"
        
    protected global::System.Web.UI.WebControls.Label Label1;
        
        
    #line default
        
    #line hidden
        
        
        
    #line 10 "F:\WebSite8\Default.aspx"
        
    protected global::System.Web.UI.HtmlControls.HtmlForm form1;
        
        
    #line default
        
    #line hidden
        
        
    protected System.Web.Profile.DefaultProfile Profile {
            
    get {
                
    return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
            }
        }
        
        
    protected System.Web.HttpApplication ApplicationInstance {
            
    get {
                
    return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));
            }
        }
    }


    #line 12,13,10 分别定义了Button变量Button1,Label变量Label1以及Form变量from1,回到我们的窗体页看看他们分别对应什么,对了,是控件id号.

    再来看第二个类:机子比较卡,我分到下一篇文章中. http://www.cnblogs.com/honey/articles/1161203.html

     h

    o
    n
    e
    y
  • 相关阅读:
    我的公众号:WebHub
    The Qt Resource System
    Node.js Streams:你需要知道的一切
    2019春招前端面试预测题!
    BeamNG.drive物理引擎评鉴
    EcmaScript对象克隆之谜
    死锁与囚徒困境的辩证关系
    停止学习框架
    qt5android
    opencvKmeans图像分割根据颜色
  • 原文地址:https://www.cnblogs.com/honey/p/1161231.html
Copyright © 2020-2023  润新知