詳解ASP.NET組件設計之生命周期_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析asp.net下web控件點評
      asp.net下控件分二大類,分別在 System.Web.UI.WebControls System.Web.UI.HtmlControls 命名空間下,前者繼承自WebControl,后者繼承自HtmlControl,這二個類又都繼承自System.Web.UI.Control 額, windows平臺,不論你從事什么開發,最終都需要有人調用load

      ASP.NET組件設計之生命周期是什么呢?讓我們來看看:

      當一個ASP.NET頁面被請求后,一個page實例被生成,開始自己的邏輯,最終返回HTML流給用戶端。構成邏輯處理的是page中存在的服務器端控件以及控件間的交互,并且在頁面結束前服務器控件們被銷毀(視.net的回收策略而定)。那么這些控件在短短的頁面處理過程中經歷了創建、處理、銷毀等到底是如何組織的?這些控件是如何同其他控件交互,如何在多個頁面間保持狀態的?(這應當是整個控件開發的基本也是重要的知識)

      首先,我們看看特殊的控件,也就是Page類,所有aspx頁面的父類(或者祖先)。因為這是我們程序員主要的舞臺。Page類繼承自TemplateControl, 且實現了IhttpHandler。IhttpHandler接口是保證頁面被ASP.NET框架所調度,并且可以獲得HTTP協議的數據輸入流以及獲得向HTTP輸出流輸出數據的能力;而TemplateControl類是繼承自Control類。Page實現了InamingContainer接口,這保證了他可以充當頁面中的控件們的容器(控件們的戰斗舞臺)

      好了,現在看看在ASP.NET組件設計中的ASP.NET控件生命周期(看看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頁面中聲明創建的控件,如果是在頁面/控件的事件處理程序中創造得控件,則在控件加入到控件樹開始執行各個階段,直到達到頁面的當前階段,之后,該動態創建的控件將隨同頁面其他控件一樣工作。

      ASP.NET組件設計中的ASP.NET控件生命周期就向你介紹到這里,希望對你在ASP.NET組件設計的學習中ASP.NET控件生命周期的了解有自己的認識。

       

      分享:解讀ASP.NET中使用AJAX中的方式
      asp.net中使用php常用的jquery等類庫來實現ajax不是很容易。因為asp.net的機制已經被封裝了,依靠內部的viewstate,如果硬用js修改了控件的值,跟他的viewstate對不上,而這些控件又是不可修改的,將對程序造成安全性困擾,后臺獲取值也是一個麻煩。 另外,a

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-10-06
      相關.Net教程