与ASP.NET 1.x 相比,ASP.NET 2.0 提供了一种粒度更细的页面生命周期和相应的方法栈。在ASP.NET 2.0中,一个页面的生命周期的主要流程如图9-1所示(粗体字表示ASP.NET 2.0新增加的阶段页面事件):


图9-1  页面生命周期

下面是页面在每个阶段事件里进行的工作 (粗体字代表的是为ASP.NET 2.0新增阶段)。

l  OnPreInit:是页面的第一个阶段。在此阶段中,如果存在站点个性化信息或者页面主题以及Master Page定义,页面对象将会把这些信息加载进来。

l  OnInit:OnInit阶段会执行一些必要的步骤来实例化一个页面对象,同时属于该页面对象的服务器控件也将被初始化为默认状态。在这个阶段还不能访问页面的任何服务器控件。另外,控件皮肤和个性化信息将在此阶段被引用。

l  OnInitComplete:当页面初始化完成以后会进入该过程来引发InitComplete事件,除了页面视图状态(View State)数据,所有的服务器控件在这个时候都已经可以访问。

l  载入页面视图状态(Load View State):这个阶段通过LoadViewState 方法来完成。该方法将会恢复由上一个页面请求中SaveViewState方法保存的View State 信息。每一个服务器控件都可以重载该方法来对View State信息的恢复加入更多的控制。

l  处理回送数据:如果页面服务器控件实现了IPostBackDataHandler接口,那么页面将能自动加载回送的数据,然后进行一些处理。实现IPostBackDataHandler必须实现LoadPostData 和RaisePostDataChangeEvent这两个方法,其中RaisePostDataChangeEvent将在回送更改通知这个阶段被调用。

l  OnPreLoad:ASP.NET2.0在Load事件之前增加了预加载(Preload),事件它赋予用户对页面更细粒度的控制。所有的服务器控件已经被初始化完成,View State和回送数据也都可以访问了。

l  OnLoad:当一个页面被加载的时候发生。

l  处理回送事件:当回送开始的时候触发这个事件,要处理回送事件,页面必须定义IPostBackEventHandler。

l  OnLoadComplete:页面加载完成的时候发生。另外为了确保View-State能够被动态创建控件访问,控件必须在PreRender之前加载,也就是说OnLoadComplete这个阶段是最后一个动态创建服务器控件的阶段。

l  预呈现(PreRender):在预呈现过程中,页面将通知每一个服务器控件在呈现阶段之前去执行一些必要的操作。

l  OnPreRenderComplete:这个阶段,页面所有部分都已经准备好被显示了(Render)。在此之后,页面将无法再进行任何显示上的改动。

l  保存ControlState: 控件状态信息(ControlState)是ASP.NET2.0新增的属性,很类似ViewState. ControlState可以用来保存控件的状态,特别是当ViewState被禁用的时候还可以用它来保证对控件状态信息的读写。

l  保存ViewState:和ASP.NET1.x 相同,view state被保存在HTML 的Hidden节中。通过LoadViewState和SaveViewState方法,可以定制管理view state的细节。

l  呈现(Render):将内容发送给HtmlTextWriter对象,它将会把内容发送给浏览器。

l  UnLoad:这是页面生命周期的最后一个阶段,在这个阶段中,将会执行一些清理操作,关闭数据库连接,关闭文件,清理对象,等等。

通过上面的概述,相信读者会对ASP.NET 1.x 和ASP.NET 2.0的页面生命周期有了一定的了解。ASP.NET 2.0一些新增的特性也与此有联系,所以通过这一节,将可以帮助读者对后面的内容有更加深入的理解。

posted on 2009-06-06 22:17  钱途无梁  阅读(344)  评论(0编辑  收藏  举报