为了更好的理解Asp页面加载时的过程,我画了一个大概的流程图(详见附件),参考O'Reilly公司出版的Programming Asp.Net第二版。
在页面加载期间,生命周期包括以下步骤:
1.调用页面及页面上控件的构造函数。
2.确定是第一次加载啊,还是自回传啊,还是跨页回传。
3.调用预初始化方法,
[url]http://blog.youkuaiyun.com/itfly8/archive/2007/12/11/1930032.aspx[/url]
4.加载个性化主题
5.初始化。在此阶段程序构建控件树,这个阶段调用
6.此时回传数据还未加载到控件中,根据第2步中访问模式的不同,会有两个不同的加载方式。
(1)如果页面为第一次加载,服务器直接调用预加载方法
(2)如果是回传模式,则加载页面和控件状态,同时,加载视图状态,即把页面中缓存的数据和控件捆绑到一起,然后通过Post方法来处理服务器上的数据,通过LoadPostData方法实现对需要回传的视图的更新,然后执行(1)中的预加载。
7.加载阶段执行用户的代码,显示客户端数据,层级加载控件树中的控件。此阶段可以通过
7.1中间调用
8.页面加载后,也会根据2中的回传模式,由不同分支处理。
(1)如果第一次加载,则直接调用
(2)如果是回传模式,并且当前状态较先前状态发生变化,会引起RaiseChangedEvents事件,客户端通过
9.预呈现阶段,这是呈现前最后一个可以对页面进行修改的阶段,调用
10.保存状态。个性化,控件,页面状态及视图都会保存。
11.呈现阶段,将页面及服务器控件输出为HTML到前端展现,可以通过
12.卸载。此阶段完成最终清理工作,如释放数据库连接等。可通过
在页面加载期间,生命周期包括以下步骤:
1.调用页面及页面上控件的构造函数。
2.确定是第一次加载啊,还是自回传啊,还是跨页回传。
3.调用预初始化方法,
protected override void OnPreInit(EventArgs e)
,因为该方法在加载个性化主题前调用,所以可以对服务器控件外观等做设置。参考:[url]http://blog.youkuaiyun.com/itfly8/archive/2007/12/11/1930032.aspx[/url]
4.加载个性化主题
5.初始化。在此阶段程序构建控件树,这个阶段调用
protected override void OnInit(EventArgs e)
protected override void OnInitComplete(EventArgs e)
可以初始化任何值。6.此时回传数据还未加载到控件中,根据第2步中访问模式的不同,会有两个不同的加载方式。
(1)如果页面为第一次加载,服务器直接调用预加载方法
protected override void OnPreLoad(EventArgs e)
(2)如果是回传模式,则加载页面和控件状态,同时,加载视图状态,即把页面中缓存的数据和控件捆绑到一起,然后通过Post方法来处理服务器上的数据,通过LoadPostData方法实现对需要回传的视图的更新,然后执行(1)中的预加载。
7.加载阶段执行用户的代码,显示客户端数据,层级加载控件树中的控件。此阶段可以通过
protected override void OnLoad(EventArgs e)
方法进行修改。7.1中间调用
protected void Page_Load(object sender, EventArgs e)
方法8.页面加载后,也会根据2中的回传模式,由不同分支处理。
(1)如果第一次加载,则直接调用
protected override void OnLoadComplete(EventArgs e)
完成加载(2)如果是回传模式,并且当前状态较先前状态发生变化,会引起RaiseChangedEvents事件,客户端通过
protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
方法对该事件进行响应,然后执行(1)步调用加载完成方法。9.预呈现阶段,这是呈现前最后一个可以对页面进行修改的阶段,调用
protected override void OnPreRender(EventArgs e)
方法进行处理。10.保存状态。个性化,控件,页面状态及视图都会保存。
11.呈现阶段,将页面及服务器控件输出为HTML到前端展现,可以通过
protected override void Render(HtmlTextWriter writer)
方法进行重写,如有必要,可通过调用protected override void CreateChildControls()
方法在控件树内创建并初始化控件。12.卸载。此阶段完成最终清理工作,如释放数据库连接等。可通过
protected override void OnUnload(EventArgs e)
方法来加入自己的清理工作。