理解Asp.Net Pages

1.动态编译

当一个Asp.Net Page被创建时,实际上创建的是一个.net类, 一个System.Web.UI.Page的实例. 页面的所有内容,包括HTML代码和Script代码,都被编译进这个.net类中.

当有一个Request请求这个页面时,Asp.Net Framework检查被请求页面的相应的类是否存在,如果不存在则把页面编译成.net类,并且把编译了的类(assembly)存放到Temporary Asp.Net Files这个目录中.这个文件夹一般位于
                          :\WINDOWS\Microsoft.NET\Framework\[version]\Temporary ASP.NET Files
当有新的请求到来时,编译过程将不在需要,先前编译好的类直接执行,并把结果返回给浏览器.

2.控件树

Asp.Net Page可以理解为是一个.Net类的源代码, 除此之外,也可以把Asp.Net Page理解为是一个控件包( a bag of controls).因为有点控件本身可能含有控件,因此更确切点一点,可以把Asp.Net Page理解为一个控件树.
例如:

 1 ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ Page Language="VB" Trace="true"  %>
 2 None.gif <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 3 None.gif "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 4 None.gif < html  xmlns ="http://www.w3.org/1999/xhtml"   >
 5 None.gif < head  id ="Head1"  runat ="server" >
 6 None.gif     < title > Show Control Tree </ title >
 7 None.gif </ head >
 8 None.gif < body >
 9 None.gif     < form  id ="form1"  runat ="server" >
10 None.gif     < div >
11 None.gif
12 None.gif     < asp:DropDownList
13 None.gif         id ="DropDownList1"
14 None.gif        Runat ="server" >
15 None.gif         < asp:ListItem  Text ="Oranges"   />
16 None.gif         < asp:ListItem  Text ="Apples"   />
17 None.gif     </ asp:DropDownList >
18 None.gif
19 None.gif     < asp:Button
20 None.gif         id ="Button1"
21 None.gif        Text ="Submit"
22 None.gif        Runat ="server"   />
23 None.gif
24 None.gif     </ div >
25 None.gif     </ form >
26 None.gif </ body >
27 None.gif </ html >
28 None.gif
这样一个Asp.Net Page, 它的控件树结构如下代码所示:
None.gif __Page ASP.showcontroltree_aspx
None.gif    ctl02 System.Web.UI.LiteralControl
None.gif    ctl00 System.Web.UI.HtmlControls.HtmlHead
None.gif        ctl01 System.Web.UI.HtmlControls.HtmlTitle
None.gif    ctl03 System.Web.UI.LiteralControl
None.gif    form1 System.Web.UI.HtmlControls.HtmlForm
None.gif        ctl04 System.Web.UI.LiteralControl
None.gif        DropDownList1 System.Web.UI.WebControls.DropDownList
None.gif        ctl05 System.Web.UI.LiteralControl
None.gif        Button1 System.Web.UI.WebControls.Button
None.gif        ctl06 System.Web.UI.LiteralControl
None.gif    ctl07
None.gif
None.gif
Asp.Net Page中包含的所有内容都被包含进一个.Net类中, 甚至包括HTML和纯文本内容.
3.Code-Behind Pages

Asp.Net Framework允许你创建两种类型的Asp.Net Pages, 单文件Pages和双文件Pages.这两种类型到底怎么样就不再赘述.稍微来看一下code-behind是如何工作的.

在Asp.Net 1.1中,Asp.Net Framework会为表现层页面(.aspx)和code-behind文件(.cs)产生两个单独的类,这两个类之间通过继承相关联,其中表现层页面类继承code-behind类.

由于继承是一个单向的关系,因此这种方法很脆弱.所有在表现层页面中声明的控件也必须同样在code-behind文件中声明,而且属性必须也相同.否则,控件触发的事件就可能不会被code-behind文件所捕获而加以处理.

在Asp.Net 2.0中,引入了一种新的机制:Partial Class.它允许把一个类的定义分散到不同的文件中.因此你就不需要在表现层页面和code-behind文件中同时声明,两者中任何的一个声明都可以在另一个中直接使用.

5.处理页面事件

当你请求一个页面时,页面触发事件的顺序如下:

  1. PreInit

  2. Init

  3. InitComplete

  4. PreLoad

  5. Load

  6. LoadComplete

  7. PreRender

  8. PreRenderComplete

  9. SaveStateComplete

  10. Unload

转载于:https://www.cnblogs.com/jun1st/archive/2007/05/03/734908.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值