這篇文章主要介紹了Asp.NET頁面事件加載的順序,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
十載的開平網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整開平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“開平網(wǎng)站設(shè)計”,“開平網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
ASP.NET 母版頁和內(nèi)容頁中的事件
我們知道母版頁和內(nèi)容頁都可以包含控件的事件處理程序。對于控件而言內(nèi)容頁中的控件在內(nèi)容頁中引發(fā)事件,母版頁中的控件在母版頁中引發(fā)事件??丶录粫膬?nèi)容頁發(fā)送到母版頁,也不能在內(nèi)容頁中處理來自母版頁控件的事件,它們只會在自己事件內(nèi)部進(jìn)行處理。
下面是母版頁(Master)與內(nèi)容頁(ContentPage)合并后事件的發(fā)生順序:
Master頁面控件 Init 事件。 ContentPage頁面控件 Init 事件。 Master頁 Init 事件。 ContentPage頁 Init 事件。 ContentPage頁 Load 事件。 Master頁 Load 事件。 ContentPage頁面控件 Load 事件。 ContentPage頁面 PreRender 事件。 Master頁面 PreRender 事件。 Master頁面控件 PreRender 事件。 ContentPage頁面控件 PreRender 事件。
母版頁和內(nèi)容頁中的事件順序?qū)τ陧撁骈_發(fā)人員并不重要。但是,如果創(chuàng)建的事件處理程序取決于某些事件的可用性,了解母版頁和內(nèi)容頁中的事件順序很有幫助。
Asp.Net中頁面事件加載的先后順序
1、單獨一個Page 執(zhí)行中將按照如下順序激活事件:
Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComplete Page.PreRender Page.PreRenderComplete
2、如果頁面從另一個頁面繼承,如BasePage:System.Web.UI.Page
,在BasePage中添加了一下驗證功能,如是否登錄、是否擁有權(quán)限等方面的檢查,而其它頁面從BasePage繼承,則BasePage和最終Page的事件激活順序是:
BasePage.PreInit Page.PreInit BasePage.Init Page.Init BasePage.InitComplite Page.InitComplite BasePage.PreLoad Page.PreLoad BasePage.Load Page.Load BasePage.LoadComplete Page.LoadComplete BasePage.PreRender Page.PreRender BasePage.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
需要注意的是Master里面是沒有PreInit事件。
4、如果ContentPage繼承BasePage,那么,各事件的執(zhí)行順序?qū)⒆兂桑?/p>
BasePage.PreInit ContentPage.PreInit Master.Init BasePage.Init ContentPage.Init BasePage.InitComplite ContentPage.InitComplite BasePage.PreLoad ContentPage.PreLoad BasePage.Load ContentPage.Load Master.Load BasePage.LoadComplete ContentPage.LoadComplete BasePage.PreRender ContentPage.PreRender Master.PreRender BasePage.PreRenderComplete ContentPage.PreRenderComplete
只需要記住:先加載繼承頁,再加載自己,如果繼承頁有繼承則先加載繼承頁的繼承。
事件處理器名稱 | 發(fā)生時間 |
Page_Init | 在Web窗體的視圖狀態(tài)加載服務(wù)器控件并對其初始化。 這是窗體生命周期的第一步 |
Page_Load | 在Page對象上載入服務(wù)器控件。由于此時視圖狀態(tài)信息是可以使用的,因此載這里可以用代碼來改變空間的設(shè)置或者載頁面上顯示文本。 |
Page_PreRender | 應(yīng)用程序?qū)⒁尸F(xiàn)Page |
Page_Unload | 頁面從內(nèi)存中卸載 |
Page_Error | 發(fā)生未處理的異常 |
Page_AbortTransaction | 事務(wù)處理被終止 |
Page_CommitTransaction | 事務(wù)處理被接受 |
Page_DataBinding | 把頁面上的服務(wù)器空間和數(shù)據(jù)源綁定載一起 |
Page_Disposed | Page對象從內(nèi)存中釋放掉。這是Page對象生命周期中的最后一個事件 |
Init,Load,PreRender事件執(zhí)行順序:
1)控件的Init事件
2)控件所在頁面的Init事件
3)控件所在頁面的Load事件
4)控件的Load事件
5)控件所在頁面的PreRender事件
6)控件的PreRender事件
個人研究的一些心得體會:(下面的兩點可以通過自建頁面并重寫相關(guān)事件進(jìn)行驗證)
1.Init事件從最里面的控件(例如用戶控件)向最外面的控件(頁面)引發(fā),Load及PreRender等其他事件從最外面的控件向最里面的控件引發(fā)。
2.控件之間相同事件的執(zhí)行順序依控件在頁面的位置按從左到右,從上到下的先后順序執(zhí)行。
注意:
1. 切記用戶控件也被視為頁面中的一個控件;
2. 把用戶控件作為單獨的一個特殊頁面來看,它本身及其所包含的控件同樣遵守相同的規(guī)律。
3. 如果客戶端程序(如JavaScript)中會用到客戶端body對像的onload事件,注意這個客戶端事件是最后執(zhí)行,即在服務(wù)器端所有事件執(zhí)行完后才執(zhí)行。
4. Master、用戶自定義控件里面是沒有PreInit、OnComplete事件.Master本身就是一個用戶控件usercontrol,usercontrol繼承TemplateControl,TemplateControl繼承Control,讓我們看看Control里面可重寫的事件(部分截圖),也可以查看此官方文檔:https://referencesource.microsoft.com/#System.Web/UI/Control.cs,87dbac93d9749fa2。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Asp.NET頁面事件加載的順序”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!