ASP.NET C# 生命週期 « 關於網路那些事...
ASP.NET 生命週期
ASP.NET 可以動態的生成頁面,而運作的架構生命週期主要可以分為:
- 應用程式生命週期(Application Life Cycle)
- 頁面生命週期(Page Life Cycle)
[應用程式生命週期(Application Life Cycle)]
- 當使用者透過瀏覽器訪問時,瀏覽器會先向web server傳送請求,
- 在 server 端在一開始都會先執行:
- 建立 ApplicationManager Class 物件
- 建立 HostingEnvironment Class 物件,提供請求來源有關的訊息。
建立應用程式初始成員
建立 Response 物件,包括 HttpContext,HttpRequest,HttpResponse 都會在這時被初始化建立
HttpApplication 物件被實體化,並且被指派給 request
Request 被 HttpApplication class 處理,並根據處理的結果呼叫不同事件
[頁面生命週期(Page Life Cycle)]
當頁面被請求,會先被載入 server 的記憶體中進行處理,接著再傳送回瀏覽器,再將專案從記憶體中解除安裝
整個頁面生命週期主要有
初始化 (Initialization)
實體化頁面控制 (Instantiation of the controls on the page)
階段修復及維護
執行事件處理程式
顯示頁面
下方列出 ASP.NET 頁面不同階段
網頁要求(Page Request)
開始進入生命週期(Starting of page life cycle)
在這階段,會檢查來源物件,如果是舊的請求或者是表單 post back,就會將 IsPostBack屬性設定為true頁面初始化(Page Initialization)
在這階段,會指派一個 UNID 給頁面的控制屬性給新的請求,
若是舊的請求或 post back,則會沿用之前的控制屬性,並且針對 post back 相關處理進行調整載入頁面(Page Load)
控制屬性會根據view states 以及 control state 值進行設定驗證(Validation)
如果請求有呼叫 validation 方法,validation 控制就會被啟用及執行
IsValid 屬性會被設定為truePostBack事件處理(PostBack Event Handling)
如果請求來源屬於 postback(old request),就會執行處理渲染頁面(Render)
在這階段,view state 以及 controls 都已經被執行及儲存,
接著,主要的輸出頁面流程都會開始在 OutputStream Class 裡處理解除安裝(Unload)
渲染過的頁面會被傳送到client端。
頁面相關請求及反應,接著就會被解除安裝清除。
[整個頁面生命週期事件]
每一個頁面的生命週期,都會觸發一些事件
這些事件通常都是函式或者次路由的形式,可以直接透過 Onclick 或者 handle 來觸發。
下方是常用的一些頁面生命週期事件:
*PreInit * - PreInit 是頁面生命週期第一個事件,會檢查IsPostBack以及是哪個頁面 postback。 可以動態設定 themes 屬性。可以透過 OnPreInit方法或建立一個 Page_PreInit 來處理對應的事件。
Init - Init event initializes the control property and the control tree is built. This event can be handled by overloading the OnInit method or creating a Page_Init handler.
InitComplete - 可以用來追蹤 view state。
LoadViewState - 可以將 view state 資訊載入controls。
LoadPostData - 在這個階段,所有 input 欄位的內容都會被form標籤所定義及處理。
PreLoad - PreLoad 會在post back data載入controls之前啟用,這個事件可以用來overloading OnPreLoad方法,或者可以建立一個 Page_PreLoad。
Load - Load 事件會在頁面一開始準備載入之前被呼叫,呼叫之後會遞迴的處理每個子控制專案,執行相同動作。可以透過 overloading OnLoad 方法,或者建立一個 Page_Load handler。
LoadComplete - Loading 程式完成時,會呼叫LoadCompolet,這個事件可以透過 overloading OnLoadComplete方法或者建立一個Page_LoadComplete handler。
PreRender - 這個事件只有在 output rendered 時才會觸發,透過這個事件,頁面及controls可以在output rendered之前執行任何更新。
PreRenderComplete - 當 PreRender完成時候被執行。
SaveStateComplete - 當頁面control階段被儲存時,view也被儲存,HTML markup建立。這個階段能夠用來 overriding Render 方法或者建立一個 Page_Render handler。
UnLoad - 頁面生命週期的最後一個階段,可以在這裡關閉一些連線或者清除不會用到的資料。
如果你喜歡我們的文章內容,請在這裡按個讚
Tweet