有很多理由去解釋了解ASP.NET頁面生命周期是非常重要的,主要是要去了解什麼地方放置什麼特定的方法,什麼時候我們應該設定什麼相關的屬性。如果去開發自定義的伺服器控件,了解生命周期對糾正控件初始化時候的錯誤,以及使用view-state和背景代碼設定屬性是非常有用的。(控件事件隻與ASP.NET頁面相關)
頁面生命周期要看它是否是第一次請求,還是回發(本身頁面請求),最後決定是否到Web伺服器。當一個網頁被Web伺服器請求時,在回發到web浏覽器之前,會經過一系列步驟/事件(如初始化,控件執行個體化,state的恢複和儲存,執行事件處理代碼,渲染)。
如果我們正确地使用和操作頁面生命周期事件,它對web應用程式開發會是一個非常友善和強大的工具。
IIS : 它是Microsoft .NET預設的web伺服器。IIS幫助你釋出web sites和web application。當IIS Web伺服器接受一個Web資源(檔案)的請求,它檢查檔案的擴充名(例如:.aspx, ascx, .ashx 和.asmx),然後決定使用哪個 ISAPI 擴充來處理這個請求,然後傳遞這個請求給正确的 ISAPI擴充。
ASPNET_ISAPI.DLL: IIS加載這個dll,然後将頁面請求發送給這個dll。這個dll為進一步處理而加載HTTPRuntime 。
ASPNET_WP.EXE:它包含了應用程式池。每個應用程式池可以包含任意數量的應用程式。應用程式池也稱為應用程式域。當一個網頁被請求時,查找IIS的目前的應用程式正在運作的應用程式池,并且将請求轉發到各自的工作程序。
通常浏覽器每次發送請求的時候,頁面的生命周期每次都會執行一遍,頁面的執行個體被建立、HTTP 運作時調用ProcessRequest 、然後執行起始頁。
下面的表格顯示了每個階段和相應的事件:
階段
事件/方法
頁面初始化
Page_Init
加載View State
LoadViewState
回發資料處理
LoadPostData
頁面加載
Page_Load
回發通知
RaisePostDataChangedEvent
回發事件處理
RaisePostBackEvent
頁面預渲染
Page_PreRender
儲存viewstate
SaveViewState
Page渲染
Page_Render
Page 解除安裝
Page_UnLoad
Asp.net确定對一個使用者發起的頁面請求是被解析和編譯還是發送提供的網頁緩存。在生命周期之前,變化非常多。在這之後,檢查這個請求是否是正常的請求,在此之後,還要求檢查的是一個正常的要求,回發,跨頁回發或回調。
該頁面構造函數建立的控件樹,在HTTP運作時執行個體化頁面類來處理請求。
PreInit
這一事件是在頁面生命周期的開始。每個頁面控件初始化和根據aspx代碼設定屬性。
可以改變或設定母版頁或者主題
建立或重新建立動态控件。
讀取或設定配置屬性值。
Init
首先, Page的Init事件發生,然後頁面上每個控件Init事件發生。在此階段,Viewstate 資訊是不可用的。
控件已經被初始化
如果有的話,主題皮膚被應用。
初始化控件屬性
InitComplete
此事件是用來處理所有要求初始化都完成的任務。
PreLoad
此事件發生在執行任何處理之前,在Load之前發生。使用這個事件,如果您在Load事件之前,需要在網頁或者控件上執行相關的處理,頁面執行個體引發此事件之前,它為頁面和所有的控件加載view state 。然後處理回發資料的任何附帶要求的執行個體。
Load :
在控件中設定屬性, 建立資料庫的連接配接
Control Events :
有一些控件的特定的事件,例如: Button Click, DropDownIndexChanged 等等。
Load Complete
這些事件用來處理一些在Load事件處理完成之後需要處理的任務。
PreRender
在這種事件中,頁面可以確定所有子控件都被建立。頁面為所有的子控件調用EnsureChildControls也包括自己。每一個控件的資料源/綁定屬性設定為它的綁定方法調用。
SaveStateComplete
這個事件發生在頁面和所有的控件的編碼和儲存viewstate之後。
Render
每一個asp.net控件都有渲染方法,頁面的執行個體調用此方法并輸出控件的标記
Unload
Unload事件用來執行清除任務,像關閉資料庫連接配接,關閉打開的檔案,完成日志,以及一些其他的任務。該事件首先針對每個控件發生,繼而針對該頁發生。
<a href="http://www.codeproject.com/KB/aspnet/Page_Life_Cycle_Explain.aspx" target="_blank">http://www.codeproject.com/KB/aspnet/Page_Life_Cycle_Explain.aspx</a>
本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/01/18/Page_Life_Cycle_Explain.html,如需轉載請自行聯系原作者