ASP.NET 母版頁和內容頁中的事件javascript
母版頁和內容頁均可以包含控件的事件處理程序。對於控件而言,事件是在本地處理的,即內容頁中的控件在內容頁中引起事件,母版頁中的控件在母版頁中引起事件。控件事件不會從內容頁發送到母版頁。一樣,也不能在內容頁中處理來自母版頁控件的事件。java
在某些狀況下,內容頁和母版頁中會引起相同的事件。例如,二者都引起 Init 和 Load 事件。引起事件的通常規則是初始化事件從最裏面的控件向最外面的控件引起,全部其餘事件則從最外面的控件向最裏面的控件引起。請記住,母版頁會合併到內容頁中並被視爲內容頁中的一個控件,這一點十分有用。web
下面是母版頁與內容頁合併後事件的發生順序:服務器
母版頁控件 Init 事件。asp.net
內容控件 Init 事件。.net
母版頁 Init 事件。對象
內容頁 Init 事件。繼承
內容頁 Load 事件。生命週期
母版頁 Load 事件。事件
內容控件 Load 事件。
內容頁 PreRender 事件。
母版頁 PreRender 事件。
母版頁控件 PreRender 事件。
內容控件 PreRender 事件。
母版頁和內容頁中的事件順序對於頁面開發人員並不重要。可是,若是您建立的事件處理程序取決於某些事件的可用性,那麼您將發現,瞭解母版頁和內容頁中的事件順序頗有幫助。
關於asp.net中頁面事件加載的前後順序
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
瀏覽下來發現並非我如今所學的asp.net 1.1,估計應該是asp.net 2.0,
不過也沒有關係,這讓我知道了他們有繼承時加載的順序。
即:先加載繼承頁的,再加載本身的,若是繼承頁有繼承則先加載繼承頁的繼承。
實際上是個很簡單的內容。順便寫下Page事件(不知道1.1是否是就這些)
事件處理器名稱
發生時間
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事件,注意這個客戶端事件是最後執行,即在服務器端全部事件執行完後才執行。