一下引用自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,如需轉載請自行聯系原作者