一、ASP.NET 母版頁和內容頁中的事件
母版頁和內容頁都可以包含控件的事件處理程序。對於控件而言,事件是在本地處理的,即內容頁中的控件在內容頁中引發事件,母版頁中的控件在母版頁中引發事件。控件事件不會從內容頁發送到母版頁。同樣,也不能在內容頁中處理來自母版頁控件的事件。
在某些情況下,內容頁和母版頁中會引發相同的事件。例如,兩者都引發 Init 和 Load 事件。引發事件的一般規則是初始化事件從最里面的控件向最外面的控件引發,所有其他事件則從最外面的控件向最里面的控件引發。
請記住,母版頁會合並到內容頁中並被視為內容頁中的一個控件,這一點十分有用。
下面是母版頁與內容頁合並后事件的發生順序:
- 母版頁控件 Init 事件。
- 內容控件 Init 事件。
- 母版頁 Init 事件。
- 內容頁 Init 事件。
- 內容頁 Load 事件。
- 母版頁 Load 事件。
- 內容控件 Load 事件。
- 內容頁 PreRender 事件。
- 母版頁 PreRender 事件。
- 母版頁控件 PreRender 事件。
- 內容控件 PreRender 事件。
母版頁和內容頁中的事件順序對於頁面開發人員並不重要。但是,如果您創建的事件處理程序取決於某些事件的可用性,那么您將發現,了解母版頁和內容頁中的事件順序很有幫助。
二、關於asp.net中頁面事件加載的先后順序
1、Page 執行中將按照如下順序激活事件:
Page.PreInit
Page.Init
Page.InitComplite
Page.PreLoad
Page.Load
Page.LoadComplete
Page.PreRender
Page.PreRenderComplete
2、如果頁面從另一個頁面繼承,如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
3、如果使用了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
4、更進一步,如果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
這讓我知道了他們有繼承時加載的順序。
即:先加載繼承頁的,再加載自己的,如果繼承頁有繼承則先加載繼承頁的繼承。
其實是個很簡單的內容。順便寫下Page事件:
事件處理器名稱 |
發生時間 |
Page_Init |
在Web窗體的視圖狀態加載服務器控件並對其初始化。 這是web窗體生命周期的第一步 |
Page_Load |
在Page對象上載入服務器控件。由於此時視圖狀態信息是可以使用的, 因此載這里可以用代碼來改變空間的設置或者載頁面上顯示文本。 |
Page_PreRender |
應用程序將要呈現Page對象 |
Page_Unload |
頁面從內存中卸載 |
Page_Error |
發生未處理的異常 |
Page_AbortTransaction |
事務處理被終止 |
Page_CommitTransaction |
事務處理被接受 |
Page_DataBinding |
把頁面上的服務器空間和數據源綁定載一起 |
Page_Disposed |
Page對象從內存中釋放掉。這是Page對象生命周期中的最后一個事件 |
Init,Load,PreRender事件執行順序:
1)控件的Init事件
2)控件所在頁面的Init事件
3)控件所在頁面的Load事件
4)控件的Load事件
5)控件所在頁面的PreRender事件
6)控件的PreRender事件
規律:
1)Init事件從最里面的控件(包括用戶控件及普通控件)向最外面的控件(頁面)引發,Load及PreRender等其他事件從最外面的控件向最里面的控件引發;
2)控件之間相同事件的執行順序依控件在頁面的位置按從左到右,從上到下的先后順序執行。
注意:
1)切記用戶控件也被視為頁面中的一個控件;
2)把用戶控件作為單獨的一個特殊頁面來看,它本身及其所包含的控件同樣遵守相同的規律;
3)有時在客戶端程序(如javascript)中會用到客戶端body對像的onload事件,注意這個客戶端事件是最后執行,即在服務器端所有事件執行完后才執行。
歡迎大家加入QQ交流群:15129679