ASP.NET組件設計Step by Step(5)

來源:互聯網
上載者:User

控制項生存周期

 

當一個asp.net頁面被請求後,一個page執行個體被產生,開始自己的邏輯,最終返回HTML流給使用者端。構成邏輯處理的是page中存在的伺服器端控制項以及控制項間的互動,並且在頁面結束前伺服器控制項們被銷毀(視.net的回收策略而定)。那麼這些控制項在短短的頁面處理過程中經曆了建立、處理、銷毀等到底是如何組織的?這些控制項是如何同其他控制項互動,如何在多個頁面間保持狀態的?(這應當是整個控制項開發的基本也是重要的知識)

首先,我們看看特殊的控制項,也就是Page類,所有aspx頁面的父類(或者祖先)。因為這是我們程式員主要的舞台。Page類繼承自TemplateControl, 且實現了IhttpHandler。IhttpHandler介面是保證頁面被asp.net架構所調度,並且可以獲得HTTP協議的資料輸入流以及獲得向HTTP輸出資料流輸出資料的能力;而TemplateControl類是繼承自Control類。Page實現了InamingContainer介面,這保證了他可以充當頁面中的控制項們的容器(控制項們的戰鬥舞台)

 

好了,現在看看控制項的生命週期(看看MS是如何定義這個架構體系的):

1、  Instance 執行個體化

通過控制項的構造器所執行個體化。還可以通過被父控制項執行個體化而產生。

 

2、  Initialize 初始化

控制項會通過預設調用OnInit方法,從而引發On_init事件。Page根據aspx頁面的文法以及標籤設定值來初始化控制項,對聲明文法中的控制項及其屬性賦值。作為一個特殊控制項,一般可以在Page的OnInit事件中允許編程者提供控間的初始化操作(對某些屬性賦值)。對於控制項包含的子控制項,控制項可以訪問他們,但是子控制項是不可以訪問父控制項的(因為控制項此時還沒有被載入(Load))。

 

3、  Begin Tracking View State 開始跟蹤檢視狀態

發生在初始化階段末尾,Page會調用控制項的TrackViewState方法(這是一個繼承自Control的保護方法)

 

4、  Load View State 載入視圖

此時,頁面架構自動回復了ViewState字典(ViewState資料來自表單form中的隱含欄位),控制項會根據ViewState值來設定自己的屬性或者內部欄位變數等

 

5、  Load PostBack Data載入回傳資料

如果控制項實現了IpostBackDataHandle介面,那麼頁面回調用控制項實現的介面,讓其參與對回傳資料的處理

 

6、  Load 載入

此時,控制項樹(page的控制項以及控制項的子控制項構成的樹)所有控制項都已經被初始化,並恢複到上一個周期的狀態(這是通過ViewState獲得的),可以訪問其他的任何控制項。

 

7、  Raise Change Events引發修改(控制項的)事件

處理回傳的資料,此時可能會引起控制項的某些事件作為對某些屬性被修改的通知。

 

8、  Raise Postback Event 引發回傳資料

當發生修改事件時候,引發將用戶端發生的一些事件映射到伺服器控制項的事件,從而調用控制項的事件的處理常式。這大多是控制項開發人員的客戶—另外一些程式員重用控制項時的舞台。

 

9、  PreRender 預產生

通過調用控制項的OnPreRender方法,執行在產生控制項前的所需任何工作。遞迴調用子控制項的此方法。

 

10、Save View State 儲存檢視狀態

       控制項繼承Control的方法來儲存當前控制項狀態到ViewState中去

      

11、Render 產生

       控制項輸出HTML資料到HTML流中去。

      

12、Unload 卸載

       頁面通過實現Page_Onload方法執行清除工作,也預設引發控制項的Unload事件

 

13、Dispose釋放

       此時,控制項執行清除佔用資源的方法。

 

以上討論適宜於在aspx頁面中聲明建立的控制項,如果是在頁面/控制項的事件處理常式中創造得控制項,則在控制項加入到控制項樹開始執行各個階段,直到達到頁面的當前階段,之後,該動態建立的控制項將隨同頁面其他控制項一樣工作。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=265217

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.