ASP.NET 頁生命周期和頁面事件處理管道


      ASP.NET 頁運行時,此頁將經歷一個生命周期,在生命周期中將執行一系列處理步驟。這些步驟包括初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼以及進行呈現。了解頁生命周期非常重要,因為這樣做您就能在生命周期的合適階段編寫代碼,以達到預期效果。此外,如果您要開發自定義控件,就必須熟悉頁生命周期,以便正確進行控件初始化,使用視圖狀態數據填充控件屬性以及運行任何控件行為代碼。(控件的生命周期基於頁的生命周期,但是頁引發的控件事件比單獨的 ASP.NET 頁中可用的事件多。)

      一般來說,頁要經歷下表概述的各個階段。除了頁生命周期階段以外,在請求前后還存在應用程序階段,但是這些階段並不特定於頁。(有關更多信息,請參見 MSDN:ASP.NET 應用程序生命周期概述。)

      我們知道最終我們在服務器上創建的頁面對象是通過Page的一個派生類來創建的,這個類通常情況下是看不到的,包括類的名字也不是我們直接指定的。這個類是由ASP.NET服務器根據我們的頁面模板文件aspx創建出來的,頁面對象的ProcessRequest方法將會啟動頁面的生成過程。這個過程是通過頁面的處理管道來完成的。

      下表列出了最常用的頁生命周期事件。除了列出的事件外還有其他事件;不過,大多數頁處理方案不使用這些事件。而是主要由 ASP.NET 網頁上的服務器控件使用,以初始化和呈現它們本身。如果要編寫自己的 ASP.NET 服務器控件,則需要詳細了解這些階段。(有關創建自定義控件的信息,請參見MDDN:開發自定義 ASP.NET 服務器控件。 )

      注意事項(來自MSDN):

      各個 ASP.NET 服務器控件都有自己的生命周期,該生命周期與頁生命周期類似。例如,控件的 InitLoad 事件在相應的頁事件期間發生。

      雖然 InitLoad 都在每個控件上以遞歸方式發生,但它們的發生順序相反。每個子控件的 Init 事件(還有 Unload 事件)在為其容器引發相應的事件之前發生(由下到上)。但是,容器的 Load 事件是在其子控件的 Load 事件之前發生(由上到下)。

可以通過處理控件的事件(如 Button 控件的 Click 事件和 ListBox 控件的 SelectedIndexChanged 事件)來自定義控件的外觀或內容。在某些情況下,可能也需處理控件的 DataBindingDataBound 事件。有關更多信息,請參見各個控件的類參考主題以及開發自定義 ASP.NET 服務器控件

      當從 Page 類繼承類時,除了可以處理由頁引發的事件以外,還可以重寫頁的基類中的方法。例如,可以重寫頁的 InitializeCulture 方法,以便動態設置區域性信息。注意,在使用 Page_事件語法創建事件處理程序時,將隱式調用基實現,因此無需在方法中調用它。例如,無論是否創建 Page_Load 方法,始終都會調用頁基類的 OnLoad 方法。但是,如果使用 override 關鍵字(在 Visual Basic 中為 Overrides)重寫頁的 OnLoad 方法,則必須顯式調用基方法。例如,如果在頁中重寫 OnLoad 方法,則必須調用 base.Load(在 Visual Basic 中為 MyBase.Load)以運行基實現。

      行文至此,希望能對各位博友有點幫助~(DebugLZQ懇請:不喜勿噴~)

 

      【請點擊下面的“綠色通道”-“關注DebugLZQ”,lz將繼續分享lz認為值得分享的東東~,祝願大家:開心!進步!】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM