天天看點

頁面生命周期

一下引用自CatChen的原文:

一般加載分為以下幾個主要階段(粗體标出的階段的特殊性後面解釋):

Init - 初始化,是否為動态控件就以此為分界,Init之前加入到控件樹的控件其處理過程就和ASPX中靜态聲明的一緻,因為靜态控件也就是在Init前加入的。

LoadViewState - 加載ViewState。

ProcessPostData - 處理PostData,倒不如說是加載PostData,因為此階段控件多數僅加載PostData,順便判斷PostData是否有改變,别的處理不在此階段作。

Load - 加載,讓ASP.NET程式員盡情發揮創意的地方,包括如何糟蹋ASP.NET這個架構。

ProcessPostData Second Try - 第二次嘗試處理PostData,和第一次所做的一樣,不過第一次執行時已在控件樹上的控件不會受到第二次打擾。

Raise ChangedEvents - 冒泡Changed類事件,這裡指的是由于PostData變更而引起的Changed類事件。

Raise PostBackEvent - 冒泡PostBack類事件,除了Changed類以外的所有事件都在這裡引發。

PreRender - 預呈現,這名字不怎麼好記,改為“末日審判”或許會好一些,因為作為上帝的程式員在這裡判決每一個變量的最終值。

SaveViewState - 儲存ViewState,判決執行的階段,變量最終值在此儲存,判入地獄的變量無權進入ViewState這個天堂并從此消失。

Render - 呈現,可能是生命周期中最無法解耦的一個階段。

Unload - 解除安裝,有加載自然有解除安裝,但其實沒有多少人知道它的存在。

追趕加載不同于一般加載,打個比方的話: 

11個步驟中,粗體字部分比喻成“軍機處”(專門釋出軍事任務),非粗體部分(處理PostData事件等)比如成“軍事任務”。 

父親(Parent Control)帶領着兒子(Control)加入了光榮的人民解放軍,随時準備為偉大的WEB革命獻身。 

父子倆人沿着同一條革命行軍路線(生命周期路線),一路上有多個軍機處。每個軍機處僅釋出該處到下一處之間軍事任務清單(任務太多了,是以分多處釋出,分布式嘛)。父子均在軍機處擷取軍事任務。 

父親比較有經驗,被指揮官安排從革命爆發之始就加入了革命,一直在認認真真地執行各處釋出的任務。而兒子因為經驗不足,由指揮官(asp.net程式員)安排不定時加入革命執行任務。 

如果安排兒子在軍機處加入,可以取到該處與下一處之間所有軍事任務清單,并順利完成任務。 

否則, 

如果兒子是在相鄰兩個軍機處之間加入的話,因為沒有收到 到達下一軍機處之前的 軍事任務清單,自然就會在到達下一軍機處之前,什麼也不會幹(因為不知道幹什麼)。 

兒子接到指揮官(asp.net程式員)的軍事任務:“處理PostData事件”,由父親引導執行(因為老爸年紀大有經驗些)。 

如果兒子在名為“load“的軍機處或以前被安排加入革命,可以取到“處理PostData事件”的軍事任務,完成任務沒問題。否則兒子因為沒完成任務WEB革命失敗,傷心的可是我們這些指揮官了。

本文轉自today4king部落格園部落格,原文連結:http://www.cnblogs.com/jinzhao/archive/2009/05/08/1452539.html,如需轉載請自行聯系原作者

繼續閱讀