介紹
對於ASP.NET開發者,理解ASP.NET的頁面生命周期是非常重要的。主要是為了搞明白在哪裡放置特定 的方法和在何時設置各種頁面屬性。但是記憶和理解頁面生命周期裡提供的事件處理方法(method)非常困 難。互聯網上有很多關於頁面生命周期內部機制的文章,所以本文只准備簡單覆蓋技術的基礎部分,更主 要的目的是給大家提供一個簡單得記憶頁面生命周期的方法。
准確的記憶ASP.NET頁面生命周期每一個階段發生了什麼事情是比較困難的,一種便於記憶的方法是根 據各個階段的名字組合出一個縮寫。微軟的文檔給出的ASP.NET生命周期如下:
Page Request
Start
Page Initialization
Load
Validation
Postback event handling
Rendering
Unload
根據這個組合出一個縮寫非常容易。既然Page Request技術上並不是頁面生命周期的一部分(這個階 段僅僅標示我們是否開始一個頁面周期或者從緩存加載一個頁面),我們為了方便,就不包括這一階段。
S – Start
I – Initialize
L – Load
V – Validate
E – Event Handling
R – Render
這樣就組合出一個縮寫“SILVER',這個英文單詞非常好記。當然,一定要記住頁面生命周期的最後一 個環節unload沒有包括在裡面。如果你覺得有必要,你可以記憶為“SILVER-U”或者“SILVER-YOU",盡 管有點破壞這個記憶法的完美性。現在,我們非常容易就記住了頁面生命周期,接著我們總結一下每一步 都發生了什麼,都有什麼事件伴隨著發生。
1.Start
在這個階段,頁面屬性,比如Request, Response, IsPostBack和UICulture 被創建。最為一個開發人 員,大部分時候在這個階段你不需要做任何事。如果你需要調用或者重寫(override)這一階段的行為,可 以使用PreInit方法創建或者重新創建動態控件,設置master page或者theme或者讀取和設置profile property的值。要注意的一點是,如果是回傳(postback)的頁面請求,所有控件的值還沒有從view state 裡還原,如果你在這個階段設置一個控件的值,這個值有可能在下面的階段被重寫並覆蓋。
2.Initialize
這個階段對於開發人員是很重要。在這個階段,theme被應用,所有的控件都被設置了唯一的ID。開發 人員在這個階段可以調用Init, InitComplete和PreLoad 方法。微軟關於這些方法使用的建議如下:
Init – 這個事件發生在所有控件被初始化並且皮膚設置也被應用後。使用這個事件來讀取控件的初 始化值。
InitComplete – 這個事件被Page對象觸發,使用這個事件處理那些要求所有初始化工作都完成後才 能做的事情。
PreLoad - 如果在頁面或者控件進入Load事件前你有什麼要處理的,使用這個事件。Page在觸發這個 事件後,Page就會為自己和所有的控件加載view state並且處理所有Request中的postback數據。