1. 程式人生 > >ASP.NET C# 生命週期 « 關於網路那些事...

ASP.NET C# 生命週期 « 關於網路那些事...

ASP.NET 生命週期

ASP.NET 可以動態的生成頁面,而運作的架構生命週期主要可以分為:

  • 應用程式生命週期(Application Life Cycle)
  • 頁面生命週期(Page Life Cycle)

[應用程式生命週期(Application Life Cycle)]

  1. 當使用者透過瀏覽器訪問時,瀏覽器會先向web server傳送請求,
  2. 在 server 端在一開始都會先執行:
  3. 建立 ApplicationManager Class 物件
  4. 建立 HostingEnvironment Class 物件,提供請求來源有關的訊息。
  5. 建立應用程式初始成員

  6. 建立 Response 物件,包括 HttpContext,HttpRequest,HttpResponse 都會在這時被初始化建立

  7. HttpApplication 物件被實體化,並且被指派給 request

  8. 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 屬性會被設定為true

  • PostBack事件處理(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 - 頁面生命週期的最後一個階段,可以在這裡關閉一些連線或者清除不會用到的資料。


如果你喜歡我們的文章內容,請在這裡按個讚