位置:海鸟网 > IT > ASP.NET >

ASP.NET页面生命周期的整体把握

对于每一个.NET程序员,对于ASP.NET页面生命周期都有一定的了解和把握。关于一些细节方面请参考,内容比较详尽,本文将不再概述。本文主要是从继承以及视图状态,事件,委托,容器控件以及子控件这些方面来把握和控制整体的页面生命周期。

      先看下下面4个相关页面的代码(为降低复杂度,很多代码被删减与精简,仅提供最基本的操作代码)。仅仅几个文件,先看下整体文件的布局,有一个整体的把握。              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(一)父类的相关事件以及处理

                                                                   __doPostBack()第一个参数必须用控件的name 而不是ID。控件名为将父控件ID用$符号连接起来的。第二个参数是传给控件的Value值。第一个参数对应 Request.Form["__EVENTTARGET"]; 第二个参数对应Request.Form["__EVENTARGUMENT"]。此函数是DOTNET 的服务器控件产生的,所以要使用此函数,必须整个页面上至少要有一个控件可以回传页面。其实,dotnet 服务器控件在页面上产生两个隐藏的控件一个名为__EVENTTARGET ,另一个名为__EVENTARGUMENT。

(2)ViewState视图状态保存的是页面级别的内容。CurrentID 

             

  

       在每个页面上的事件中增加自定义跟踪,可以发现如下情况:Init和Load都在每个控件上递归方式发生,但它们发生的顺序是相反的。每个子控件的Init与Unload事件在其容器引发相应的事件之前发生。容器的Load事件是在其子控件的Load事件之前发生。

trace.txt内容显示如下(生成页面的过程以及点击事件触发跟踪):
2010-11-23 02:26:29 828: UserEventControl  OnInit
2010-11-23 02:26:29 828: UserParentPage  OnInit
2010-11-23 02:26:29 828: Default  OnInit
2010-11-23 02:26:29 828: UserParentPage  OnLoad
2010-11-23 02:26:29 828: Default   Page_Load
2010-11-23 02:26:29 828: UserEventControl  OnLoad
2010-11-23 02:26:29 828: UserEventControl  OnLoad  !Page.IsPostBack==true
2010-11-23 02:26:29 828: UserEventControl  OnLoad
2010-11-23 02:26:29 828: UserEventControl  OnLoad  !Page.IsPostBack==true
2010-11-23 02:26:31 171: UserEventControl  OnInit
2010-11-23 02:26:31 171: UserParentPage  OnInit
2010-11-23 02:26:31 171: Default  OnInit
2010-11-23 02:26:31 171: UserParentPage  OnLoad
2010-11-23 02:26:31 171: Default   Page_Load
2010-11-23 02:26:31 171: UserEventControl  OnLoad
2010-11-23 02:26:31 171: UserEventControl  OnLoad
2010-11-23 02:26:31 171: UserEventControl  lbtnShow_Click
2010-11-23 02:26:31 171: Default   userEventControl_Changed   

从前面的6句可以看出,子控件UserEventControl  的Init事件发生在UserParentPage  以及Default  的Init事件之前,而子控件UserEventControl  的Load事件发生在UserParentPage  以及Default  的Load事件之后。其中,父类UserParentPage  的事件发生在子类Default  的事件之前。

 

注:

2010-11-23 02:26:29 828: UserEventControl  OnLoad
2010-11-23 02:26:29 828: UserEventControl  OnLoad  !Page.IsPostBack==true
2010-11-23 02:26:29 828: UserEventControl  OnLoad
2010-11-23 02:26:29 828: UserEventControl  OnLoad  !Page.IsPostBack==true

   

              

源码下载:PageEventProcess.rar