ASP.NET 頁面執行順序詳解

今天整理了一下基礎知識,現在發現我們做什麼都是拿來主義了.結果卻發現有很多基礎的東西已經記不得或是不知道具體的過程.我們習慣說:"嗯,大概就是這個樣子的....". "我以前好像也是這麼樣的...."."執行都差不多是這個過程啦,具體我也不知道,等需要的時候再查吧....".
    到今天,再想一想學校自己所學的.ORACLE已經忘記他的特性了.JAVA也就是如上面我說的那樣,或許更差,因爲幾乎沒有機會去碰他了,從我畢業後第一份工是.NET開始.於是我只知道.net平臺我還在向前走着,可是也是大多數人的拿來主義與修改主義.因爲不知道內涵,所以不懂如何去創新,不懂怎樣優化.對API的貧乏,開發WINDOWS平臺的產品就讓我停滯在了這個.net平臺應用.
     所以今天整理了一下基礎的東東,從.net頁碼的執行週期開始做一個詳細的瞭解.我重寫了頁面的絕大多數方法.然後加載執行.所得的順序如下.(我的平臺是VS2005, .net framework 2.0 。 方法是每個重寫的事件中都輸出一個字符,按字符打印出來的先後判斷事件執行的順序。如有不正確之處,還請路過的各位不吝賜教)
執行序號  Period override 測試方法 SDK 所注順序 Details (.net FrameWork)
1 頁請求 OnPreInit(EventArgs e) PreInit 1.使用 IsPostBack 屬性確定是否是第一次處理該頁。
2.創建或重新創建動態控件。
3.動態設置主控頁。
4.動態設置 Theme 屬性。
5.讀取或設置配置文件屬性值.   如果請求是回發請求,則控件的值尚未從視圖狀態還原。如果在此階段設置控件屬性,則其值可能會在下一階段被改寫。
2   OnInit(EventArgs e)
Init 1.讀取或初始化控件屬性
3   OnInitComplete(EventArgs e)
   
4 加載 OnPreLoad(EventArgs e)
Load  
5 驗證 OnLoad(EventArgs e)
  1.讀取和更新控件屬性。
6   Page_Load(object sender, EventArgs e)
   
7   OnLoadComplete(EventArgs e)
   
8 回發事件處理 此處我沒有找到可行的重寫事件,
但SDK中描述這裏有事件產生。
Control event 執行特定於應用程序的處理:如果頁包含驗證程序控件,請在執行任何處理之前檢查頁和各個驗證控件的 IsValid 屬性。處理特定事件,如 Button 控件的 Click 事件。
9 呈現 OnPreRender(EventArgs e)
PreRende 對頁的內容進行最後更改。
10   OnPreRenderComplete(EventArgs e)
   
11   OnSaveStateComplete(EventArgs e)
   
12   Render(HtmlTextWriter writer)    
13 卸載   unload 執行最後的清理工作,可能包括:關閉打開的文件和數據庫連接。完成日誌記錄或其他特定於請求的任務。

以下爲SDK2.0中所注:
注意 在卸載階段,頁及其控件已被呈現,因此無法對響應流做進一步更改。如果嘗試調用方法(如 Response.Write 方法),則該頁將引發異常。請注意有關頁生命週期的以下附加信息:
• 各個 ASP.NET 服務器控件都有自己的生命週期,該生命週期與頁生命週期類似。例如,在相應的頁事件期間將調用控件的 Init 和 Load 方法。如果頁上包含控件,則將首先調用控件的 Init 方法,然後再調用頁的 Init 方法。但是,將在調用控件的 Load 方法之前先調用頁的 Load 方法。
• 通過處理控件的事件,可以自定義控件的外觀或內容。例如,所有的控件都將引發 Init、Load 和 Unload 事件,但是頁開發人員通常不處理這些事件。而是通常處理特定於控件的事件,如 Button 控件的 Click 事件和 ListBox 控件的 SelectedIndexChanged 事件。在某些情況下,可能也需處理控件的 DataBinding 或 DataBound 事件。有關更多信息,請參見各個控件的類參考主題以及開發自定義 ASP.NET 服務器控件。
• 除了處理由頁引發的事件以外,還可以重寫頁的基類中的方法。例如,可以重寫頁的 InitializeCulture 方法,以便動態設置區域性信息。注意,在使用 Page_event 語法創建事件處理程序時,將隱式調用基實現,因此無需在方法中調用它。例如,無論是否創建 Page_Load 方法,始終都會調用頁基類的 OnLoad 方法。但是,如果使用 override 關鍵字(在 Visual Basic 中爲 Overrides)重寫頁的 OnLoad 方法,則必須顯式調用基方法。例如,如果在頁中重寫 OnLoad 方法,則必須調用 base.Load(在 Visual Basic 中爲 MyBase.Load)以運行基實現。

 
發佈了18 篇原創文章 · 獲贊 0 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章