ASP.net中页面事件的先后顺序

客户发出 POST 请求-〉创建 Page 派生类,调用构造函数-〉调用 Page 类的IHttpHandler.ProcessRequest 方法-〉激活 Page 类的 Init 事件-〉调用 Page 类的CreateChildControls 虚方法-〉从 POST 变量和 VIEWSTATE 中还原服务器端控件状态-〉激活 Page 类的 Load 事件-〉激活服务器端控件事件-〉激活 Page 类的 PreRender 事件-〉调用 Page 类的 Render 虚方法-〉调用 Page 类的 RenderChildren 虚方法-〉发送 HTTP 响应给客户端-〉激活 Page 类的 Unload 事件-〉丢弃 Page 派生类的实例。

Page 执行中将按照如下顺序激活事件:

Page.PreInit
Page.Init
Page.InitComplite
Page.PreLoad
Page.Load
Page.LoadComplete
Page.PreRender
Page.PreRenderComplete

如果页面从令一个页面继承,如 BasePage:System.Web.UI.Page,在 BasePage 中做了一些扩展,如权限检查,而其他页面从 BasePage 继承,则 BasePage 和最终 Page 的事件激活顺序是:

UI.PreInit
Page.PreInit
UI.Init
Page.Init
UI.InitComplite
Page.InitComplite
UI.PreLoad
Page.PreLoad
UI.Load
Page.Load
UI.LoadComplete
Page.LoadComplete
UI.PreRender
Page.PreRender
UI.PreRenderComplete
Page.PreRenderComplete

如果使用了 MasterPage,则 MasterPage 中的事件和 ContentPage 中的事件按照下面顺序激活:

ContentPage.PreInit
Master.Init
ContentPage.Init
ContentPage.InitComplite
ContentPage.PreLoad
ContentPage.Load
Master.Load
ContentPage.LoadComplete
ContentPage.PreRender
Master.PreRender
ContentPage.PreRenderComplete

更进一步,如果 ContentPage 继承 BasePage,那么,各事件的执行顺序将变成:

UI.PreInit
ContentPage.PreInit
Master.Init
UI.Init
ContentPage.Init
UI.InitComplite
ContentPage.InitComplite
UI.PreLoad
ContentPage.PreLoad
UI.Load
ContentPage.Load
Master.Load
UI.LoadComplete
ContentPage.LoadComplete
UI.PreRender
ContentPage.PreRender
Master.PreRender
UI.PreRenderComplete
ContentPage.PreRenderComplete

posted @ 2008-09-16 17:25  悲伤的第七音  Views(109)  Comments(0)    收藏  举报