Asp.NET頁面事件載入的順序是什麼樣的

來源:互聯網
上載者:User
這篇文章主要給大家介紹了關於Asp.NET頁面中事件載入的先後順序,文中通過圖文以及範例程式碼介紹的非常詳細,對大傢具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

本文主要給大家介紹了關於Asp.NET頁面事件載入先後順序的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:

ASP.NET 主版頁面和內容頁中的事件

我們知道主版頁面和內容頁都可以包含控制項的事件處理常式。對於控制項而言內容頁中的控制項在內容頁中引發事件,主版頁面中的控制項在主版頁面中引發事件。控制項事件不會從內容頁發送到主版頁面,也不能在內容頁中處理來自主版頁面控制項的事件,它們只會在自己事件內部進行處理。

下面是主版頁面(Master)與內容頁(ContentPage)合并後事件的發生順序:


Master頁面控制項 Init 事件。ContentPage頁面控制項 Init 事件。Master頁  Init 事件。ContentPage頁 Init 事件。ContentPage頁 Load 事件。Master頁  Load 事件。ContentPage頁面控制項 Load 事件。ContentPage頁面 PreRender 事件。Master頁面  PreRender 事件。Master頁面控制項 PreRender 事件。ContentPage頁面控制項 PreRender 事件。

主版頁面和內容頁中的事件順序對於頁面開發人員並不重要。但是,如果建立的事件處理常式取決於某些事件的可用性,瞭解主版頁面和內容頁中的事件順序很有協助。

Asp.Net中頁面事件載入的先後順序

1、單獨一個Page 執行中將按照如下順序啟用事件:


Page.PreInitPage.InitPage.InitComplitePage.PreLoadPage.LoadPage.LoadCompletePage.PreRenderPage.PreRenderComplete

2、如果頁面從另一個頁面繼承,如BasePage:System.Web.UI.Page ,在BasePage中添加了一下驗證功能,如是否登入、是否擁有許可權等方面的檢查,而其它頁面從BasePage繼承,則BasePage和最終Page的事件啟用順序是:


BasePage.PreInitPage.PreInitBasePage.InitPage.InitBasePage.InitComplitePage.InitCompliteBasePage.PreLoadPage.PreLoadBasePage.LoadPage.LoadBasePage.LoadCompletePage.LoadCompleteBasePage.PreRenderPage.PreRenderBasePage.PreRenderCompletePage.PreRenderComplete

3、如果使用了MasterPage,則MasterPage中的事件和ContentPage中的事件按照下面順序啟用:


ContentPage.PreInitMaster.InitContentPage.InitContentPage.InitCompliteContentPage.PreLoadContentPage.LoadMaster.LoadContentPage.LoadCompleteContentPage.PreRenderMaster.PreRenderContentPage.PreRenderComplete

需要注意的是Master裡面是沒有PreInit事件。

4、如果ContentPage繼承BasePage,那麼,各事件的執行順序將變成:


BasePage.PreInitContentPage.PreInitMaster.InitBasePage.InitContentPage.InitBasePage.InitCompliteContentPage.InitCompliteBasePage.PreLoadContentPage.PreLoadBasePage.LoadContentPage.LoadMaster.LoadBasePage.LoadCompleteContentPage.LoadCompleteBasePage.PreRenderContentPage.PreRenderMaster.PreRenderBasePage.PreRenderCompleteContentPage.PreRenderComplete

只需要記住:先載入繼承頁,再載入自己,如果繼承頁有繼承則先載入繼承頁的繼承。

事件處理器名稱 發生時間
Page_Init 在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事件,注意這個用戶端事件是最後執行,即在伺服器端所有事件執行完後才執行。

4. Master、使用者自訂控制項裡面是沒有PreInit、OnComplete事件.Master本身就是一個使用者控制項usercontrol,usercontrol繼承TemplateControl,TemplateControl繼承Control,讓我們看看Control裡面可重寫的事件(部分),也可以查看此官方文檔:https://referencesource.microsoft.com/#System.Web/UI/Control.cs,87dbac93d9749fa2。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.