八.保存ViewState(SaveViewState)
所有对页面控件的修改完成后viewstate就被保存了。对像的状态数据还是保留在隐藏的<input>控件里面,呈现给Html的对象状态数据也是从这里取得的。在 SaveViewState事件中,其值能被保存到viewstate对象,然而这时在页面上控件的修改却不能了。你可以用SaveViewState来重载这一步,图示如下:
|
|
九.呈递给Html(Render) |
运用Html创建给浏览器输出的页面的时候Render事件就发生了。在Render事件过程中,页面调用其中的对象将它们呈递给Html。然后,页面就可以以Html的形式被用户的浏览器访问了。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的Html来组织页面。Render方法将一个HtmlTextWriter对象作为参数并用它将Html在浏览器上以网页的形式显示。这时仍然可以做一些修改动作,不过它们只是客户端的一些变化而已了。你可以重载Render事件,图示如下: |
|
|
十.销毁对象(Page_UnLoad) |
在呈递给Html完成后,所有的对象都应被销毁。在Dispose事件中,你应该销毁所有在建立这个页面时创建的对象。这时,所有的处理已经完毕,所以销毁任何剩下的对象都是不会产生错误的,包括页面对象。你可以重载Dispose事件。 |
全文总结 |
以上就是Asp.net页面生命周期中的几个主要事件。每次我们请求一个Asp.net页面时,我们都经历着同样的过程:从初始化对象到销毁对象。通过了解Asp.net页面的内部运行机制,我相信大家在编写、调试代码的时候会更加游刃有余的。不过整个页面的生命周期的方法如下:
方法 | 活动 |
Constructor |
Always |
Construct |
Always |
TestDeviceFilter |
Always |
AddParsedSubObject |
Always |
DeterminePostBackMode |
Always |
OnPreInit |
Always |
LoadPersonalizationData |
Always |
InitializeThemes |
Always |
OnInit |
Always |
ApplyControlSkin |
Always |
ApplyPersonalization |
Always |
OnInitComplete |
Always |
LoadPageStateFromPersistenceMedium |
Always |
LoadControlState |
Always |
LoadViewState |
Always |
ProcessPostData1 |
Always |
OnPreLoad |
Always |
OnLoad |
Always |
ProcessPostData2 |
Always |
RaiseChangedEvents |
Always |
RaisePostBackEvent |
Always |
OnLoadComplete |
Always |
OnPreRender |
Always |
OnPreRenderComplete |
Always |
SavePersonalizationData |
Always |
SaveControlState |
Always |
SaveViewState |
Always |
SavePageStateToPersistenceMedium |
Always |
Render |
Always |
OnUnload |
Always |
查看页面生命周期的底层细节,我们可以看到 ASP.NET 2.0 中提供的许多功能(例如主题和个性化)将在什么地方容易实现。例如,主题在 IntializeThemes 事件中处理,而个性化数据将在 LoadPersonalizationData 中加载并稍后用于 的顺序非常重要。