1. 程式人生 > >ASP.NET頁面生命周期與控件生命周期

ASP.NET頁面生命周期與控件生命周期

回發 數據 數據處理 數據庫 dispose 足夠 -- 實現邏輯 save

ASP.NET頁面生命周期

(1)PreInit 預初始化
(2)Init 初始化
(3)InitComplete 初始化完成
(4)PreLoad 預加載
(5)Load 加載
(6)LoadComplete 加載完成
(7)PreRender 預輸出
(8)PreRenderComplete 預輸出完成
(9)Unload 卸載

ASP.NET控件生命周期

-- 實例化(Instantiate)

控件被頁面或另一個控件通過調用它的構造器所實例化。這個步驟之後所列出的階段,僅當控件加入控件樹中才會發生。

-- 初始化(Initialize)

初始化在傳入 Web 請求生命周期內所需的設置。在此階段,控件樹中的頁面和全部控件通過默認方式來調用OnInit方法。開發人員可以通過重載OnInit方法,為控件提供初始化邏輯。在其生命周期的這個時候,控件能夠安全地訪問其置於Controls集合中的子控件,但是它不能訪問控件層次中的父控件或其他層次更高的控件(如頁面)

-- 開始跟蹤視圖狀態(Begin Tracking View State)

這個階段發生在初始化階段的末尾。在此階段頁面自動調用TrackViewState方法。TrackViewState方法保證在此階段之後,使用ViewState字典屬性而產生的變化保存在控件視圖狀態中。在大多數情況下,Control基類提供的TrackViewState方法實現已經足夠了,只有在控件定義了復雜屬性時,才必須重載TrackViewState方法。

-- 加載視圖狀態(僅用於回傳過程)(Load View State (postback only))

這個階段發生在回傳時,而不是初始請求過程中,在此階段結束時,就會自動填充控件的 ViewState 屬性控件可以重寫 LoadViewState 方法的默認實現,以自定義狀態還原。

-- 加載回傳數據(僅用於回傳過程,為可選項)(Load Postback Data(postback only, optional))

只有在控件通過實現IPostBackDataHandler接口參與了回傳數據處理時,這個階段才發生在回傳中。TextBox控件就是一個例子。在這個階段中,控件必須從已發送的表單數據中,通過實現IPostBackDataHandler借口的LoadPostData方法更新其狀態。

-- 加載(Load)

直到此階段開始,控件樹中的所有控件都已被初始化,並恢復到它們在先前周期最後的狀態。OnLoad方法會執行所有請求共有的操作,如設置數據庫查詢。此時,樹中的服務器控件已創建並初始化、狀態已還原並且窗體控件反映了客戶端的數據。如果需要實現僅在頁面初始請求中執行的邏輯,那麽實現該邏輯時,應該檢查頁面的IsPostBack屬性

-- 引發修改事件(僅用於回傳過程,為可選項)(Raise Changed Events(postback only, optional))

只有在控件通過實現IPostBackDataHandler接口參與了回傳數據處理時,這個階段才發生在回傳中。在此階段中,控件通過引發事件(如TextBox的TextChanged事件)作為一種信號-----其狀態由於回傳而改變(引發更改事件以響應當前和以前回發之間的狀態更改)。為了參與此階段,控件必須實現IPostBackDataHandler接口的RaisePostDataChangedEvent方法。

-- 引發回傳事件(僅用於回傳過程,為可選項)(Raise Postback Events(postback only, optional))

只有在控件通過實現IPostBackEventHandler接口參與了回傳數據處理時,這個階段才發生在回傳中。在此階段可以通過實現IPostBackEventHandler接口的RaisePostBackEvent方法來實現邏輯,以便把客戶端事件映射到服務器端事件。

-- 預生成(PreRender)

在此階段中,應該通過重載OnPreRender方法,執行在生成控件之前所需要的任何工作。在生成輸出之前執行任何更新,可以保存在預生成階段對控件狀態所做的更改,而在生成階段所對應的更改則會丟失。

-- 保存視圖狀態(Save View State)

如果控件不維持狀態,或者它為保存其所有狀態信息而使用ViewState字典,那麽不必在此階段期間實現任何附加邏輯。在此階段期間,頁面框架會自動保存ViewState字典。如果需要自定義狀態管理,必須通過重載SaveViewState方法來實現自定義狀態恢復,這種方法只被EnableViewState屬性為true的控件所調用。在此階段以後任何控件的改變都不會保存在控件的視圖狀態中。

-- 生成(Render)

通過這種方法,控件在輸出流上通過重載Control的Render方法或WebControl類的rendering方法中的一種,來寫標記文本。

-- 卸載(Unload)

在此階段中,頁面通過實現Page_Unload方法,來執行清除工作。作為控件開發者,應該重載Dispose方法來執行清除。

-- 釋放(Dispose)

在此階段,應該重載Dispose方法來釋放控件所占的全部資源。

ASP.NET頁面生命周期與控件生命周期