日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
漫談C#開發(fā)中的ASP.NET頁(yè)生命周期

向您推薦《漫談C#開發(fā)中的反射機(jī)制》

成都創(chuàng)新互聯(lián)主營(yíng)疏附網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),疏附h5微信小程序開發(fā)搭建,疏附網(wǎng)站營(yíng)銷推廣歡迎疏附等地區(qū)企業(yè)咨詢

一般來(lái)說(shuō),頁(yè)要經(jīng)歷下表概述的各個(gè)階段。除了頁(yè)生命周期階段以外,在請(qǐng)求前后還存在應(yīng)用程序階段,但是這些階段并不特定于頁(yè)。

階段

說(shuō)明

頁(yè)請(qǐng)求

頁(yè)請(qǐng)求發(fā)生在頁(yè)生命周期開始之前。用戶請(qǐng)求頁(yè)時(shí),ASP.NET 將確定是否需要分析和編譯頁(yè)(從而開始頁(yè)的生命周期),或者是否可以在不運(yùn)行頁(yè)的情況下發(fā)送頁(yè)的緩存版本以進(jìn)行響應(yīng)。

開始

在開始階段,將設(shè)置頁(yè)屬性,如 Request 和 Response。在此階段,頁(yè)還將確定請(qǐng)求是回發(fā)請(qǐng)求還是新請(qǐng)求,并設(shè)置 IsPostBack 屬性。此外,在開始階段期間,還將設(shè)置頁(yè)的 UICulture 屬性。

頁(yè)初始化

頁(yè)初始化期間,可以使用頁(yè)中的控件,并將設(shè)置每個(gè)控件的 UniqueID 屬性。此外,任何主題都將應(yīng)用于頁(yè)。如果當(dāng)前請(qǐng)求是回發(fā)請(qǐng)求,則回發(fā)數(shù)據(jù)尚未加載,并且控件屬性值尚未還原為視圖狀態(tài)中的值。

加載

加載期間,如果當(dāng)前請(qǐng)求是回發(fā)請(qǐng)求,則將使用從視圖狀態(tài)和控件狀態(tài)恢復(fù)的信息加載控件屬性。

驗(yàn)證

在驗(yàn)證期間,將調(diào)用所有驗(yàn)證程序控件的 Validate 方法,此方法將設(shè)置各個(gè)驗(yàn)證程序控件和頁(yè)的 IsValid 屬性。

回發(fā)事件處理

如果請(qǐng)求是回發(fā)請(qǐng)求,則將調(diào)用所有事件處理程序。

呈現(xiàn)

在呈現(xiàn)之前,會(huì)針對(duì)該頁(yè)和所有控件保存視圖狀態(tài)。在呈現(xiàn)階段中,頁(yè)會(huì)針對(duì)每個(gè)控件調(diào)用 Render 方法,它會(huì)提供一個(gè)文本編寫器,用于將控件的輸出寫入頁(yè)的 Response 屬性的 OutputStream 中。

卸載

完全呈現(xiàn)頁(yè)并已將頁(yè)發(fā)送至客戶端、準(zhǔn)備丟棄該頁(yè)后,將調(diào)用卸載。此時(shí),將卸載頁(yè)屬性(如 Response 和 Request)并執(zhí)行清理。

生命周期事件

在頁(yè)生命周期的每個(gè)階段中,頁(yè)將引發(fā)可運(yùn)行您自己的代碼進(jìn)行處理的事件。對(duì)于控件事件,通過(guò)以聲明方式使用屬性(如 onclick)或以使用代碼的方式,均可將事件處理程序綁定到事件。

頁(yè)還支持自動(dòng)事件連接,即,ASP.NET 將查找具有特定名稱的方法,并在引發(fā)了特定事件時(shí)自動(dòng)運(yùn)行這些方法。如果 @ Page 指令的 AutoEventWireup 屬性設(shè)置為 true(或者未定義該屬性,因?yàn)樵搶傩阅J(rèn)為 true),頁(yè)事件將自動(dòng)綁定至使用 Page_事件的命名約定的方法(如 Page_Load 和 Page_Init)。

下表列出了最常用的頁(yè)生命周期事件。除了列出的事件外還有其他事件;不過(guò),大多數(shù)頁(yè)處理方案不使用這些事件。而是主要由 ASP.NET 網(wǎng)頁(yè)上的服務(wù)器控件使用,以初始化和呈現(xiàn)它們本身。如果要編寫自己的 ASP.NET 服務(wù)器控件,則需要詳細(xì)了解這些階段。

頁(yè)事件

典型使用

PreInit

使用該事件來(lái)執(zhí)行下列操作:

· 檢查 IsPostBack 屬性來(lái)確定是不是***次處理該頁(yè)。

· 創(chuàng)建或重新創(chuàng)建動(dòng)態(tài)控件。

· 動(dòng)態(tài)設(shè)置主控頁(yè)。

· 動(dòng)態(tài)設(shè)置 Theme 屬性。

· 讀取或設(shè)置配置文件屬性值。

Init

在所有控件都已初始化且已應(yīng)用所有外觀設(shè)置后引發(fā)。使用該事件來(lái)讀取或初始化控件屬性。

InitComplete

由 Page 對(duì)象引發(fā)。使用該事件來(lái)處理要求先完成所有初始化工作的任務(wù)。

PreLoad

如果需要在 Load 事件之前對(duì)頁(yè)或控件執(zhí)行處理,請(qǐng)使用該事件。

在 Page 引發(fā)該事件后,它會(huì)為自身和所有控件加載視圖狀態(tài),然后會(huì)處理 Request 實(shí)例包括的任何回發(fā)數(shù)據(jù)。

Load

Page 在 Page 上調(diào)用 OnLoad 事件方法,然后以遞歸方式對(duì)每個(gè)子控件執(zhí)行相同操作,如此循環(huán)往復(fù),直到加載完本頁(yè)和所有控件為止。

使用 OnLoad 事件方法來(lái)設(shè)置控件中的屬性并建立數(shù)據(jù)庫(kù)連接。

控件事件

使用這些事件來(lái)處理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。

LoadComplete

對(duì)需要加載頁(yè)上的所有其他控件的任務(wù)使用該事件。

PreRender

在該事件發(fā)生前:

· Page 對(duì)象會(huì)針對(duì)每個(gè)控件和頁(yè)調(diào)用 EnsureChildControls。

· 設(shè)置了 DataSourceID 屬性的每個(gè)數(shù)據(jù)綁定控件會(huì)調(diào)用 DataBind 方法。有關(guān)更多信息,請(qǐng)參見(jiàn)本主題后面的數(shù)據(jù)綁定控件的數(shù)據(jù)綁定事件。

頁(yè)上的每個(gè)控件都會(huì)發(fā)生 PreRender 事件。使用該事件對(duì)頁(yè)或其控件的內(nèi)容進(jìn)行***更改。

SaveStateComplete

在該事件發(fā)生前,已針對(duì)頁(yè)和所有控件保存了 ViewState。將忽略此時(shí)對(duì)頁(yè)或控件進(jìn)行的任何更改。

使用該事件執(zhí)行滿足以下條件的任務(wù):要求已經(jīng)保存了視圖狀態(tài),但未對(duì)控件進(jìn)行任何更改。

Render

這不是事件;在處理的這個(gè)階段,Page 對(duì)象會(huì)在每個(gè)控件上調(diào)用此方法。所有 ASP.NET Web 服務(wù)器控件都有一個(gè)用于寫出發(fā)送給瀏覽器的控件標(biāo)記的 Render 方法。

如果創(chuàng)建自定義控件,通常要覆蓋此方法以輸出控件的標(biāo)記。不過(guò),如果自定義控件只合并標(biāo)準(zhǔn)的 ASP.NET Web 服務(wù)器控件,不合并自定義標(biāo)記,則不需要覆蓋 Render 方法。有關(guān)更多信息,請(qǐng)參見(jiàn)開發(fā)自定義 ASP.NET 服務(wù)器控件。

用戶控件(.ascx 文件)自動(dòng)合并呈現(xiàn),因此不需要在代碼中顯式呈現(xiàn)該控件。

Unload

該事件首先針對(duì)每個(gè)控件發(fā)生,繼而針對(duì)該頁(yè)發(fā)生。在控件中,使用該事件對(duì)特定控件執(zhí)行***清理,如關(guān)閉控件特定數(shù)據(jù)庫(kù)連接。

對(duì)于頁(yè)自身,使用該事件來(lái)執(zhí)行***清理工作,如:關(guān)閉打開的文件和數(shù)據(jù)庫(kù)連接,或完成日志記錄或其他請(qǐng)求特定任務(wù)。

頁(yè)面經(jīng)歷了如下階段【其中一些階段標(biāo)記為僅僅回傳,是說(shuō)只有在被回傳到服務(wù)器時(shí),頁(yè)面才經(jīng)歷這些階段】:

01:頁(yè)面首先從QueryString或者Request對(duì)象的Form集合中獲得回傳數(shù)據(jù)。

02:頁(yè)面檢測(cè)回傳數(shù)據(jù)集合(NameValueCollection,Form或者QueryString)是否包含一個(gè)鍵為_CallBackId的項(xiàng)。

如 果存在,那么設(shè)置其Boolean屬性IsCallBack為True,以便通過(guò)AspNet客戶端回調(diào)機(jī)制,標(biāo)明頁(yè)面已經(jīng)回傳到服務(wù)器。

03:預(yù)初始化(PreInit):

在頁(yè)面生命周期的預(yù)初始化階段執(zhí)行如下操作:
a:調(diào)用OnPreInit方法引發(fā)PreInit事件。
b:利用App_Themes目錄中的內(nèi)容初始化主題,以動(dòng)態(tài)實(shí)現(xiàn)一個(gè)PageTheme類型的類,
編譯該類,并創(chuàng)建一個(gè)編譯類的實(shí)例,接著將實(shí)例賦值給它的PageTheme屬性值
c:應(yīng)用母版頁(yè)

04:初始化(Init):

在頁(yè)面生命周期的初始化階段執(zhí)行以下操作

a:遞歸初始化Controls集合中的控件。初始化包括設(shè)置這些控件的屬性,例如:Page,Id和NameContainer等
b:遞歸應(yīng)用控件皮膚
c:調(diào)用OnInit方法以引發(fā)自身的Init事件,接著遞歸調(diào)用子控件的OnInit方法來(lái)引發(fā)它們的Init事件
d:調(diào)用自身的TrackViewState方法來(lái)啟動(dòng)自身的視圖狀態(tài)跟蹤,接著遞歸調(diào)用子控件的TrackViewState方法來(lái)啟動(dòng)它們的視圖狀態(tài)跟蹤。

05:完成初始化(InitComplete):

頁(yè)面調(diào)用OnInitComplete方法來(lái)引發(fā)InitComplete事件。該事件標(biāo)明了初始化階段的結(jié)束。
此時(shí),頁(yè)面Controls集合的所有控件都被初始化了。

06:加載控件狀態(tài)(Load Control State)[PostBack Only]:

頁(yè)面遞歸調(diào)用Control集合中控件的LoadControlState方法,這些控件已經(jīng)調(diào)用了Page類的RegisterRequiresControlState方法,以使用它們的控件狀態(tài)。 

07:加載視圖狀態(tài)(Load View State)[PostBack Only]:

頁(yè)面首先調(diào)用自身的LoadViewState方法,接著遞歸調(diào)用Controls集合控件的LoadViewState方法,以允許它們加載它們的已經(jīng)保存的視圖狀態(tài)。 

08:加載回傳數(shù)據(jù)(Load Post Data)[PostBack Only]:

頁(yè)面調(diào)用實(shí)現(xiàn)IPostBackDataHandler接口的控件的LoadPostData方法,并將回傳數(shù)據(jù)傳遞給該方法。每個(gè)控件的LoadPostDate方法都必須訪問(wèn)回傳數(shù)據(jù),并據(jù)此更新相應(yīng)的控件屬性。

例如:TextBox控件的LoadPostData方法將文本框的新值設(shè)置為TextBox控件的Text屬性值。 

09:預(yù)加載(PreLoad):

頁(yè)面調(diào)用OnPreLoad方法以引發(fā)PreLoad事件。該事件表示頁(yè)面生命周期將進(jìn)入加載階段。 

10:加載(Load):

頁(yè)面首先調(diào)用自身的OnLoad方法以引發(fā)自身的Load事件,接著遞歸調(diào)用Controls集合中控件的OnLoad方法以引發(fā)它們的Load事件。頁(yè)面開發(fā)人員可以為L(zhǎng)oad事件注冊(cè)回調(diào),那么就可以通過(guò)編程將子控件添加到頁(yè)面的Controls集合中。 

11:加載回傳數(shù)據(jù)(Load Post Data)[PostBack Only Second Try]:

頁(yè)面調(diào)用控件的LoadPostBack方法。這些控件如果實(shí)現(xiàn)了IPostBackDataHandler接口,那么在加載階段,它們已通過(guò)編程添加到Controls集合中。 

12:引發(fā)回傳數(shù)據(jù)修改事件(Raise Post Data Changed Event)[PostBack Only]:

頁(yè)面調(diào)用控件的RaisePostDataChangeEvent方法,這些控件的LoadPostData方法返回true。 RaisePostDataChangeEvent方法引發(fā)了回傳數(shù)據(jù)修改事件。例如:當(dāng)文本框的新值與舊值不同時(shí),那么TextBox控件將引發(fā)該事件。 

13:引發(fā)回傳事件(Raise PostBack Event)[PostBack Only]:

頁(yè)面調(diào)用控件的RaisePostEvent方法,這些控件相關(guān)的Html元素用于提交表單。例如,Button控件的相關(guān)Html元素將頁(yè)面回傳到服務(wù)器??丶腞aisePostBackEvent方法必須將回傳事件映射到一個(gè)或多個(gè)服務(wù)器事件。例如,Button控件的RaisePostBackEvent方法將事件映射到了服務(wù)器端事件Command和Click上。 

14:完成加載(Load Complete):

頁(yè)面調(diào)用OnLoadComplete方法來(lái)引發(fā)LoadComplete事件,這表示所有加載活動(dòng),包括加載回傳數(shù)據(jù),以及引發(fā)回傳數(shù)據(jù)修改事件,并以更新控件自身的活動(dòng)都完成了。 

15:引發(fā)回調(diào)事件(Raise CallBack Event)(PostBack And CallBack Only):

頁(yè)面調(diào)用控件的RaiseCallBackEvent方法。該控件可使用AspNet客戶端回調(diào)機(jī)制來(lái)允許客戶端方法(例如JavaScript函數(shù))調(diào)用服務(wù)器端方法,而無(wú)需將整個(gè)頁(yè)面回傳給服務(wù)器。

RaiseCallBackEvent方法必須調(diào)用服務(wù)器端方法。如果頁(yè)面的回傳使用了客戶端回調(diào)機(jī)制,那么頁(yè)面將不會(huì)執(zhí)行剩余的頁(yè)面生命周期階段。 

16:預(yù)呈現(xiàn)(PreRender):

在頁(yè)面生命周期這個(gè)階段執(zhí)行一下操作。

a:調(diào)用EnsureChildControls方法來(lái)確保在頁(yè)面進(jìn)入呈現(xiàn)階段之前,創(chuàng)建其子控件。
b:調(diào)用自身的OnPreRender方法來(lái)引發(fā)PreRender事件。
c:遞歸調(diào)用Controls集合中控件的OnPreRender方法,以引發(fā)它們的PreRender事件。 

17:預(yù)呈現(xiàn)完成(PreRender Complete):

頁(yè)面調(diào)用OnPrerenderComplete方法來(lái)引發(fā)PreRenderComplete事件,這表示所有預(yù)呈現(xiàn)活動(dòng)完成了。 

18:保存控件狀態(tài)(Save Control State):

頁(yè)面遞歸調(diào)用Controls集合中控件的SaveControlState方法。這些控件已經(jīng)調(diào)用了Page類的RegisterRequiresControlState方法來(lái)保存它們的控件狀態(tài)。 

19:保存視圖狀態(tài)(Save View State):

頁(yè)面首先調(diào)用自身的SaveViewState方法,然后調(diào)用Controls集合中的SaveViewState方法,以允許它們來(lái)保存其視圖狀態(tài)。 

20:保存狀態(tài)完成(Save View Complete):

頁(yè)面調(diào)用OnSaveStateComplete方法以引發(fā)SaveStateComplete事件,這表示所有狀態(tài)保存活動(dòng)都完成了。 

21:呈現(xiàn):

在頁(yè)面生命周期的這個(gè)階段執(zhí)行一下操作。

a:創(chuàng)建一個(gè)HtmlTextWriter類實(shí)例,該實(shí)例封裝了輸出響應(yīng)流
b:調(diào)用RenderCOntrol方法,并將HtmlTextWriter實(shí)例傳遞給該方法。

RenderControl方法遞歸調(diào)用子控件的RenderControl方法,以便允許每個(gè)控件能夠呈現(xiàn)其 Html標(biāo)記文本。子控件的Html標(biāo)記文本組成了最終發(fā)送給客戶端瀏覽器的Html標(biāo)記文本。

22:卸載(unload):

該事件首先針對(duì)每個(gè)控件發(fā)生,繼而針對(duì)該頁(yè)發(fā)生。在控件中,使用該事件對(duì)特定控件執(zhí)行***清理,如關(guān)閉控件特定數(shù)據(jù)庫(kù)連接。

對(duì)于頁(yè)自身,使用該事件來(lái)執(zhí)行***清理工作,如:關(guān)閉打開的文件和數(shù)據(jù)庫(kù)連接,或完成日志記錄或其他請(qǐng)求特定任務(wù)。

原文鏈接:http://www.cnblogs.com/springyangwc/archive/2011/06/08/2075762.html

【編輯推薦】

  1. C#簡(jiǎn)單游戲外掛制作(以Warcraft Ⅲ為例)
  2. C#控件的閃爍問(wèn)題解決方法總結(jié)
  3. 淺析C#延遲加載的運(yùn)行機(jī)制和應(yīng)用場(chǎng)景
  4. C#多線程中l(wèi)ock的用法
  5. 用C#實(shí)現(xiàn)HTTP協(xié)議下的多線程文件傳輸

網(wǎng)頁(yè)標(biāo)題:漫談C#開發(fā)中的ASP.NET頁(yè)生命周期
URL鏈接:http://m.5511xx.com/article/djcceec.html