ASP.NET 頁運行時,此頁將經歷一個生命周期,在生命周期中將執行一系列處理步驟。這些步驟包括初始化、實例化控制項、還原和維護狀態、運行事件處理程式代碼以及進行呈現。瞭解頁生命周期非常重要,因為這樣做您就能在生命周期的合適階段編寫代碼,以達到預期效果。此外,如果您要開發自定義控制項,就必須熟悉頁生命周 ...
ASP.NET 頁運行時,此頁將經歷一個生命周期,在生命周期中將執行一系列處理步驟。這些步驟包括初始化、實例化控制項、還原和維護狀態、運行事件處理程式代碼以及進行呈現。瞭解頁生命周期非常重要,因為這樣做您就能在生命周期的合適階段編寫代碼,以達到預期效果。此外,如果您要開發自定義控制項,就必須熟悉頁生命周期,以便正確進行控制項初始化,使用視圖狀態數據填充控制項屬性以及運行任何控制項行為代碼。(控制項的生命周期基於頁的生命周期,但是頁引發的控制項事件比單獨的 ASP.NET 頁中可用的事件多。)
一般來說,頁要經歷下表概述的各個階段。除了頁生命周期階段以外,在請求前後還存在應用程式階段,但是這些階段並不特定於頁。(有關更多信息,請參見 MSDN:ASP.NET 應用程式生命周期概述。)
我們知道最終我們在伺服器上創建的頁面對象是通過Page的一個派生類來創建的,這個類通常情況下是看不到的,包括類的名字也不是我們直接指定的。這個類是由ASP.NET伺服器根據我們的頁面模板文件aspx創建出來的,頁面對象的ProcessRequest方法將會啟動頁面的生成過程。這個過程是通過頁面的處理管道來完成的。
下表列出了最常用的頁生命周期事件。除了列出的事件外還有其他事件;不過,大多數頁處理方案不使用這些事件。而是主要由 ASP.NET 網頁上的伺服器控制項使用,以初始化和呈現它們本身。如果要編寫自己的 ASP.NET 伺服器控制項,則需要詳細瞭解這些階段。(有關創建自定義控制項的信息,請參見MDDN:開發自定義 ASP.NET 伺服器控制項。 )
註意事項(來自MSDN):
各個 ASP.NET 伺服器控制項都有自己的生命周期,該生命周期與頁生命周期類似。例如,控制項的 Init 和 Load 事件在相應的頁事件期間發生。
雖然 Init 和 Load 都在每個控制項上以遞歸方式發生,但它們的發生順序相反。每個子控制項的 Init 事件(還有 Unload 事件)在為其容器引發相應的事件之前發生(由下到上)。但是,容器的 Load 事件是在其子控制項的 Load 事件之前發生(由上到下)。
可以通過處理控制項的事件(如 Button 控制項的 Click 事件和 ListBox 控制項的 SelectedIndexChanged 事件)來自定義控制項的外觀或內容。在某些情況下,可能也需處理控制項的 DataBinding 或 DataBound 事件。有關更多信息,請參見各個控制項的類參考主題以及開發自定義 ASP.NET 伺服器控制項。
當從 Page 類繼承類時,除了可以處理由頁引發的事件以外,還可以重寫頁的基類中的方法。例如,可以重寫頁的 InitializeCulture 方法,以便動態設置區域性信息。註意,在使用 Page_事件語法創建事件處理程式時,將隱式調用基實現,因此無需在方法中調用它。例如,無論是否創建 Page_Load 方法,始終都會調用頁基類的 OnLoad 方法。但是,如果使用 override 關鍵字(在 Visual Basic 中為 Overrides)重寫頁的 OnLoad 方法,則必須顯式調用基方法。例如,如果在頁中重寫OnLoad 方法,則必須調用 base.Load(在 Visual Basic 中為 MyBase.Load)以運行基實現。