自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解ASP.NET頁面生命周期

開發(fā) 后端
本文就ASP.NET頁面生命周期向大家做一個初步的介紹,介紹一下一個ASP.NET頁面從創(chuàng)建到處理完成過程中的十個事件。

ASP.NET是微軟.Net戰(zhàn)略的一個組成部分。它相對以前的Asp有了很大的發(fā)展,引入了許多的新機制。本文就ASP.NET頁面生命周期向大家做一個初步的介紹,以期能起到指導大家更好、更靈活地操縱ASP.NET的作用。
當一個獲取網(wǎng)頁的請求(可能是通過用戶提交完成的,也可能是通過超鏈接完成的)被發(fā)送到Web服務器后,這個頁面就會接著運行從創(chuàng)建到處理完成的一系列事件。在我們試圖建立ASP.NET頁面的時候,這個執(zhí)行周期是不必去考慮的,那樣只會自討苦吃。然而,如果被正確的操縱,一個頁面的執(zhí)行周期將是一道有效而且功能強大的工具。許多開發(fā)者在編寫ASP.NET頁面以及用戶控件的時候發(fā)現(xiàn),如果知道整個過程中發(fā)生了什么以及在什么時候發(fā)生將對完成整個任務起到很重要的幫助作用。下面我就向大家介紹一下一個ASP.NET頁面從創(chuàng)建到處理完成過程中的十個事件。

一.初始化對象

一個頁面的控件(以及頁面本身)最初應被正確的初始化。通過在你的C#文件的構造函數(shù)中聲名所有對象(如圖1),頁面就知道要創(chuàng)建多少對象以及它們的類型。一旦你在你的構造函數(shù)中聲名了所有的對象,你就可以通過繼承類、方法、事件或是屬性訪問它們。然而,如果你的一些對象是在Aspx文件中指定的一些控件,那么這些控件就沒有屬性可言了。同時,通過代碼訪問它們會產(chǎn)生一些意外的錯誤,因為這些控件實例是沒有一個確定的創(chuàng)建順序的(如果它們是被一起創(chuàng)建的)。

二.導入Viewstate數(shù)據(jù)

在初始化事件后,所有控件只可以通過它們的ID被引用訪問(因為還沒有相應的DOM可使用)。在LoadViewState這個事件中,所有的控件將獲得它們的***個屬性:Viewstate屬性。這個屬性最終將被返回給服務器以判斷這個頁面是已經(jīng)被用戶訪問完畢還是仍然在被用戶所訪問。Viewstate 屬性以“名稱/值”對的字符串方式被保存,它包含了控件的文本以及值等信息。該屬性被存儲在一個隱藏的控件的值屬性里,在請求頁面時被傳遞。這種方式比起Asp3.0的維持、判斷頁面狀態(tài)的方式有了很大的進步啊。還有,你可以重載LoadViewState事件函數(shù)來對相應的控件進行值設定。

三.用LoadPostData處理Postback數(shù)據(jù)

在頁面創(chuàng)建的這個階段,服務器對頁面上的控件提交的表單數(shù)據(jù)(在ASP.NET中稱postback數(shù)據(jù))進行處理。當一個頁面提交一個表單時,框架就在每個提交了數(shù)據(jù)的控件上執(zhí)行一個IPostBackDataHandler接口操作。然后頁面執(zhí)行LoadPostData事件,解析頁面,找到每個執(zhí)行了IpostBackDataHandler接口操作的控件,并用恰當?shù)?postback數(shù)據(jù)更新這些控件狀態(tài)。ASP.NET是通過用NameValue集中的“名稱/值”對和每個控件的唯一的ID匹配來實現(xiàn)這一操作的。所以,在ASP.NET的頁面上每個控件必須有一個唯一的ID,不可以出現(xiàn)幾個控件共有ID的情況。即使是用戶自定義的一些控件,框架也會賦予它們各自唯一的ID的。在LoadPostData事件后,就要執(zhí)行下面的RaisePostDataChanged事件了。

四.導入對象

在Load事件中,對象都實例化了。所有的對象***次被布置在DOM頁面(在ASP.NET中稱控件樹)里了并且可以通過代碼或是相關的位置被引用。這樣,對象就可以很容易的從客戶端獲得諸如寬度、高度、值、可見性等在Html中的屬性值。在Load事件中,當然還有像設置控件屬性等操作的發(fā)生。這個過程是整個ASP.NET頁面生命周期中最重要、最主要的,你可以通過調(diào)用OnLoad來重載Load事件

五.RaisePostBackChanged事件

就像在上面提到的那樣,這個事件是發(fā)生在所有的控件執(zhí)行了IPostBackDataHandler接口操作并被正確的postback數(shù)據(jù)更新后的。在這個過程中,每個控件都被賦予一個布爾值來標志該控件有沒有被更新。然后,ASP.NET就在整個頁面上尋找任何已被更新過的控件并執(zhí)行RaisePostDataChanged事件操作。不過,這個事件是要在所有的控件都被更新了以及Load 事件完成后才進行的。這樣就保證了一個控件在被postback數(shù)據(jù)更新前,別的控件在RaisePostDataChanged事件中是不會被手動改變的。

六.處理客戶端PostBack事件

當由postback數(shù)據(jù)在服務器端引起的事件都完成后,產(chǎn)生postback數(shù)據(jù)的對象就執(zhí)行RaisePostBackEvent事件操作??墒菚羞@種情況,由于一個控件狀態(tài)的改變使得它將表單返回給服務器或是用戶點擊了提交按鈕使得表單返回給服務器。在這種情況下應該有相應的處理代碼來體現(xiàn)事件驅(qū)動這一面向?qū)ο螅∣OP)編程原則。由于要滿足呈現(xiàn)給瀏覽器的數(shù)據(jù)的精確性要求,在一系列postback事件中RaisePostBackEvent事件是***發(fā)生的。

在postback過程中改變的控件不應在執(zhí)行功能函數(shù)被調(diào)用后更新。也就是說,任何由于一個預期的事件而改變的數(shù)據(jù)應該在最終的頁面上被反映出來。你可以通過修改RaisePostBackEvent函數(shù)來滿足你的要求

七.預先呈遞對象

可以改變對象并將改變保存的***時刻就是這一步――預先呈遞對象。這樣,你可以在這一步對控件的屬性、控件樹結構等作出***的修改。同時還不用考慮ASP.NET對其作出任何改變,因為此時已經(jīng)脫離了數(shù)據(jù)庫調(diào)用以及viewstate更新了。在這一步之后,對對象的所有修改將最終被確定,不能被保存到頁面的viewstate中了。你可以通過OnPreRender來重載這一步。

八.保存ViewState

所有對頁面控件的修改完成后viewstate就被保存了。對像的狀態(tài)數(shù)據(jù)還是保留在隱藏的控件里面,呈現(xiàn)給Html的對象狀態(tài)數(shù)據(jù)也是從這里取得的。在SaveViewState事件中,其值能被保存到viewstate對象,然而這時在頁面上控件的修改卻不能了。你可以用SaveViewState來重載這一步

九.呈遞給Html

運用Html創(chuàng)建給瀏覽器輸出的頁面的時候Render事件就發(fā)生了。在Render事件過程中,頁面調(diào)用其中的對象將它們呈遞給Html。然后,頁面就可以以Html的形式被用戶的瀏覽器訪問了。當Render事件被重載時,開發(fā)者可以編寫自定義的Html代碼使得原先生成的Html都無效而按照新的 Html來組織頁面。Render方法將一個HtmlTextWriter對象作為參數(shù)并用它將Html在瀏覽器上以網(wǎng)頁的形式顯示。這時仍然可以做一些修改動作,不過它們只是客戶端的一些變化而已了。你可以重載Render事件

十.銷毀對象

在呈遞給Html完成后,所有的對象都應被銷毀。在Dispose事件中,你應該銷毀所有在建立這個頁面時創(chuàng)建的對象。這時,所有的處理已經(jīng)完畢,所以銷毀任何剩下的對象都是不會產(chǎn)生錯誤的,包括頁面對象。你可以重載Dispose事件,見圖6。

全文總結

以上就是ASP.NET頁面生命周期中的十個事件。每次我們請求一個ASP.NET頁面時,我們都經(jīng)歷著同樣的過程:從初始化對象到銷毀對象。通過了解ASP.NET頁面的內(nèi)部運行機制,我相信大家在編寫、調(diào)試代碼的時候會更加游刃有余的。

【編輯推薦】

  1. 簡單介紹ASP應用程序
  2. ASP.NET的IScriptControl
  3. 詳解ASP.NET身份驗證服務
  4. 概述ASP.NET安全
  5. ASP.NET ISAPI
責任編輯:佚名 來源: 網(wǎng)易科技
相關推薦

2013-04-07 10:42:56

Asp.Net頁面周期

2009-08-04 16:05:15

ASP.NET頁面生命

2009-08-04 16:50:15

ASP.NET頁面生命

2009-08-03 14:37:38

ASP.NET編程模型頁面生命周期

2009-08-03 14:18:40

ASP.NET編程模型ASP.NET頁面生命

2012-08-16 09:38:38

ASP.NET

2009-08-10 14:31:46

ASP.NET組件設計ASP.NET控件生命

2009-07-23 10:23:44

2009-07-20 10:33:02

ASP.NET MVC

2009-07-23 18:14:17

MVC生命周期

2009-02-12 13:16:55

請求生命周期MVCASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-08-07 16:57:17

ASP.NET頁面生存

2009-07-28 09:46:53

ASP.NET服務器控

2009-07-23 18:55:17

ASP.NET頁生命周

2011-06-21 10:26:37

2009-08-04 15:58:06

ASP.NET動態(tài)控件

2021-04-26 09:22:07

ASP.NET Cor服務周期

2009-07-31 17:53:39

ASP.NET線程安全
點贊
收藏

51CTO技術棧公眾號