(转)教你记住ASP.NET WebForm页面的生命周期

对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难,即使一时记住了但是过一段时间不看可能又忘了。网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,更主要的目的是给大家提供一个简单得记忆页面生命周期的方法。准确的记忆ASP.NET页面生命周期每一个阶段发生了什么事情是比较困难的,一种便于记忆的方法是根据各个阶段的名字组合出一个缩写。微软的文档给出的ASP.NET生命周期如下:

Page Request 
Start 
Page Initialization 
Load 
Validation 
Postback event handling 
Rendering 
Unload 
根据这个组合出一个缩写非常容易。既然Page Request技术上并不是页面生命周期的一部分(这个阶段仅仅标示我们是否开始一个页面周期或者从缓存加载一个页面),我们为了方便,就不包括这一阶段。

S – Start 
I – Initialize 
L – Load 
V – Validate 
E – Event Handling 
R – Render

这样就组合出一个缩写“SILVER‘,这个英文单词非常好记。当然,一定要记住页面生命周期的最后一个环节unload没有包括在里面。如果你觉得有必要,你可以记忆为“SILVER-U”或者“SILVER-YOU",尽管有点破坏这个记忆法的完美性。现在,我们非常容易就记住了页面生命周期,接着我们总结一下每一步都发生了什么,都有什么事件伴随着发生。

1. Start

在这个阶段,页面属性,比如Request, Response, IsPostBack和UICulture被创建。最为一个开发人员,大部分时候在这个阶段你不需要做任何事。 如果你需要调用或者重写(override)这一阶段的行为,可以使用PreInit方法创建或者重新创建动态控件,设置master page或者theme或者读取和设置profile property的值。要注意的一点是,如果是回传(postback)的页面请求,所有控件的值还没有从view state里还原,如果你在这个阶段设置一个控件的值,这个值有可能在下面的阶段被重写并覆盖。

2. Initialize
这个阶段对于开发人员是很重要。在这个阶段,theme被应用,所有的控件都被设置了唯一的ID。开发人员在这个阶段可以调用Init, InitComplete和PreLoad 方法。微软关于这些方法使用的建议如下:

Init – 这个事件发生在所有控件被初始化并且皮肤设置也被应用后。使用这个事件来读取控件的初始化值。 
InitComplete –这个事件被Page对象触发,使用这个事件处理那些要求所有初始化工作都完成后才能做的事情。

PreLoad - 如果在页面或者控件进入Load事件前你有什么要处理的,使用这个事件。Page在触发这个事件后,Page就会为自己和所有的控件加载view state并且处理所有Request中的postback数据。

3. Load

这个阶段可能是开发者使用得最多的一个阶段。在这个阶段,所有的控件被viewstate中信息填充并被加载,OnLoad事件被触发。在这个阶段你可以为页面上所有的服务端控件设置属性,得到query strings,建立数据库连接。

4. Validation

如果你的控件要求验证,验证会在这个阶段发生,这个时候你可以检查控件的IsValid属性。跟这个阶段关联的事件是Validate,它有一个可以接受验证字符串群的重载方法(overload method),这个重载方法执行特定控件群的验证。

5. Event Handling
所有服务器端控件的事件处理发生在这个阶段。也就是说Click, SelectedIndexChanged等等这些事件会应用到你的服务器端控件,如果是页面请求是回传(postback)的话,这些事件的处理函数就会被控件触发。这个阶段可以使用的事件如下:

LoadComplete – 在这个阶段,页面上所有的控件加载完毕。 
PreRender – 这里有几个重点,第一:页面对象(page object)会调用每一个控件的EnsureChildControls函数,并最终调用自己的。其次:所有具有DataSourceID的数据绑定控件都会调用自己的DataBind函数。要注意的一点是,PreRender事件会发生在一个页面的每一个控件上。在这个事件的最后,页面和所有控件的ViewState被存储。

SaveStateComplete – 到这里,ViewState已经存储完毕,如果你有什么操作不需要修改控件但需要修改ViewState的,可以放在SaveStateComplete里面。

6. Render

渲染(Render)实际上不是一个事件,页面对象调用每一个控件的Render方法从而按顺序的输出控件的HTML代码。编写用户自定义控件的开发者对这个阶段最感兴趣了,因为输出用户自定义HTML代码的标准做法就是重写Render方法。如果你的控件是从ASP.NET服务器端控件继承来的,你也许不需要重写Render方法,除非你想呈现一个与用户控件默认行为不同的行为。这些都超出这个文档要讨论的范围了,如果想了解更多,请参考Microsoft‘s Developing Custom ASP.NET Server Controls. (http://msdn2.microsoft./zt27com/en-us/librarytfhy.aspx)

7. Unload

最后这个事件首先是被各个控件逐一触发,最后被页面触发。在这个时刻,所有的控件已经被渲染为输出流(output stream)并且无法被修改。这个阶段中,任何试图对response stream的操作都会引发异常。这个事件主要用于做一些清理工作,比如关闭数据库连接和打开的文件或者登记事件记录等等其它任务。

页面周期中都有哪些方法
下面列出ASP.NET页面生命周期中所有的方法,这些方法都可以被重写(override),要注意的是这些方法有的会递归调用,有个会被页面中的内容重复调用,这个列表是按照页面加载时最通用的顺序排列的。

Construct 
ProcessRequest 
FrameworkInitialize 
InitializeCulture 
If child controls are present: 
AddParsedSubObject 
CreateControlCollection 
AddedControl 
ResolveAdapter 
DeterminePostBackMode 
OnPreInit 
OnInit 
TrackViewState 
OnInitComplete 
OnPreLoad 
OnLoad 
OnLoadComplete 
EnsureChildControls 
CreateChildControls 
OnPreRender 
OnPreRenderComplete 
SaveViewState 
OnSaveStateComplete 
CreateHtmlTextWriter 
RenderControl 
Render 
RenderChildren 
VerifyRenderingInServerForm 
OnUnload 
Dispose

结论

在开发ASP.NET程序时,了解什么时候发生什么事情是非常重要的。理解页面中事件是如何层层展开节省大量挠头和查错的时间。当这些页面周期中的事件难以记住时,我希望这个使用的法子能帮助你梳理出在程序里哪个地方需要做什么处理。

原文链接:http://www.lanhusoft.com/Article/85.html

时间: 2024-12-28 21:00:20

(转)教你记住ASP.NET WebForm页面的生命周期的相关文章

ASP.NET一个页面的生命周期

在学习ASP.NET页面生命周期前,需要先了解之前的ASP.NET的基本运行机制,在理解ASP.NET基本运行机制原理后,下面将介绍ASP.NET的生命周期中,页面从创建到处理结束的过程中ASP.NET Engine执行的10个事件. 1.对象初始化 页面自身以及页面中的控件,都是在Form中被首次初始化的,初始化事件可以通过OnInit()方法重载.通过在ASPX页面的后台代码文件的构造器中声明对象,页面将知道对象的类型,并知道需要创建多少个这样的对象.一旦在构造器中声明了控件,就可以在其任何

ASP.NET -- WebForm -- 页面生命周期事件

ASP.NET -- WebForm --  页面生命周期事件在页生命周期的每个阶段中,页将引发可运行您自己的代码进行处理的事件. 1. PreInit: 使用该事件来执行下列操作: 检查 IsPostBack 属性来确定是不是第一次处理该页. 创建或重新创建动态控件. 动态设置主控页. 动态设置 Theme 属性. 读取或设置配置文件属性值. 注意: 如果请求是回发请求,则控件的值尚未从视图状态还原.如果在此阶段设置控件属性,则其值可能会在下一事件中被覆盖. 2. Init   在所有控件都已

【Framework】深入研究Asp.net页面的生命周期

介绍 Asp.net是微软.Net战略的一个组成部分.它相对以前的Asp有了很大的发展,引入了许多的新机制.本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好.更灵活地操纵Asp.net的作用. 当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件.在我们试图建立Asp.net页面的时候,这个执行周期是不必去考虑的,那样只会自讨苦吃.然而,如果被正确的操纵,一个页面的执行周

ASP.NET的WEB页面的生命周期

ASP.NET的WEB页面的生命周期,从生成到销毁,也经历了不同的阶段和过程.对于ASP.NET页面生命周期中将执行一些列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码及呈现.一般来说,也要经历如下各个阶段1.页请求:页请求发生在页面生命周期开始之前,用户请求页时,ASP.NET将确定是否需要分析和编译页2.开始:在开始阶段,将设置页属性,如Request和Response.在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性3.页初始化:

详解ASP.NET MVC的请求生命周期

本文的目的旨在详细描述asp.net mvc请求从开始到结束的每一个过程. 我希望能理解在浏览器输入url并敲击回车来请求一个asp.net mvc网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为asp.net mvc是一个扩展性非常强的框架.例如,我们可以插入不同的viewengine来控制网站内容呈现的方式.我们还可以定义控制器生成和分配到某个请求的 方式.因为我想发掘任何asp.net mvc页面请求的扩展点,所以我要来探究请求过程中的一些步骤. 其次,如果你对测

ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)

转自:http://www.cnblogs.com/darrenji/p/3795690.html 在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12) ",体验了7-12关键环节,本篇继续. ⒀当请求到达UrlRoutingModule的时候,UrlRoutingModule取出请求中的Controller.Action等RouteData信息,与路由表中的所有规则进行匹配,若匹配,把请求交给IRouteHandler,即MVCRouteHandler M

.Net页面的生命周期列表

Html象征文本.子控件的Html象征文本组成了终究发送给客户端浏览器的Html象征文本. PreInit2.0 ->初始化Theme运用MasterPag和控件Skin ->Init ->InitComplet2.0 ->IfPostBack创建子控件并加载控件/视图状况 ->PreLoad2.0 ->Load ->IfPostBack则触发服务器端事情 ->LoadComplet2.0 ->IfnotPostBack则创建子控件 ->PreR

Asp.net MVC 之请求生命周期

今天主要试着描述一下ASP.NET MVC 请求从开始到结束的整个生命周期,了解这些后,对MVC会有一个整体的认识. 这里主要研究了MVC请求的五个过程. 1.创建RouteTable 当ASP.NET应用程序第一次启动的时候才会发生第一步.RouteTable把URL映射到Handler. 2.UrlRoutingModule拦截请求 第二步在我们发起请求的时候发生.UrlRoutingModule拦截了每一个请求并且创建和执行合适的Handler. 3.生成控制器 MvcHandler创建了

JSP页面的生命周期

JSP页面的生命周期:我们假设要访问的jsp页面是index.jsp.首先,用户发出请求index.jsp:服务器会判断是否是第一次请求:如果是的话,JSP引擎会把该JSP文件转换成为一个Servlet,生成字节码文件,并执行_jspInit():如果不是的话,JSP将会访问已生成的字节码文件,解析执行_jspServlet()方法. jspService()方法被调用来处理客户端的请求.对每一个请求,JSP引擎创建一个新的线程来处理该请求.如果有多个客户端同时请求该JSP文件,则JSP引擎会创