ASP.NET頁面同時存在自訂控制項,主版頁面,內容頁的載入順序

來源:互聯網
上載者:User

 ASP.NET 主版頁面和內容頁中的事件
主版頁面和內容頁都可以包含控制項的事件處理常式。對於控制項而言,事件是在本地處理的,即內容頁中的控制項在內容頁中引發事件,主版頁面中的控制項在主版頁面中引發事件。控制項事件不會從內容頁發送到主版頁面。同樣,也不能在內容頁中處理來自主版頁面控制項的事件。
在某些情況下,內容頁和主版頁面中會引發相同的事件。例如,兩者都引發 Init 和 Load 事件。引發事件的一般規則是初始化事件從最裡面的控制項向最外面的控制項引發,所有其他事件則從最外面的控制項向最裡面的控制項引發。請記住,主版頁面會合并到內容頁中並被視為內容頁中的一個控制項,這一點十分有用。

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

主版頁面控制項 Init 事件。
內容控制項 Init 事件。
主版頁面 Init 事件。
內容頁 Init 事件。
內容頁 Load 事件。
主版頁面 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是不是就這些)

 

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事件,注意這個用戶端事件是最後執行,即在伺服器端所有事件執行完後才執行。

《ASP.NET 頁面物件模型》轉載一篇關於頁面物件模型的文章,說得比較詳細,有助理解。沒事的時候就多看兩遍,慢慢體會:)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.