日韩无码专区无码一级三级片|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)銷解決方案
ASP.NET頁(yè)面生存周期關(guān)鍵事件及執(zhí)行步驟

ASP.NET頁(yè)面生存周期介紹

一旦完全確定 HTTP 頁(yè)面處理程序類,ASP.NET 運(yùn)行時(shí)就調(diào)用該處理程序的 ProcessRequest 方法以處理請(qǐng)求。通常情況下,無(wú)需更改此方法的實(shí)現(xiàn)方式,因?yàn)樗怯?Page 類提供的。

此實(shí)現(xiàn)方法一開(kāi)始就調(diào)用 FrameworkInitialize 方法,以此建立頁(yè)面的控件樹(shù)。此方法是 TemplateControl 類(Page 類本身就是從該類派生出來(lái)的)的一個(gè)受保護(hù)的虛擬成員。任何針對(duì) .aspx 資源而動(dòng)態(tài)生成的處理程序都重寫 FrameworkInitialize。在此方法中,該頁(yè)面的完整控件樹(shù)得以構(gòu)建。

接下來(lái),ProcessRequest 使該頁(yè)面經(jīng)歷若干階段:初始化,加載視圖狀態(tài)信息和回發(fā)數(shù)據(jù),加載頁(yè)面的用戶代碼并執(zhí)行回發(fā)服務(wù)器端事件。隨后,該頁(yè)面進(jìn)入呈現(xiàn)模式:收集更新后的視圖狀態(tài);生成 HTML 代碼然后將其發(fā)送到輸出控制臺(tái)。最后,卸載頁(yè)面,并認(rèn)為已完成對(duì)該請(qǐng)求的處理。

在各個(gè)階段中,頁(yè)面都會(huì)激發(fā)一些 Web 控件和用戶定義的代碼所能截獲并處理的事件。其中的一些事件是嵌入式控件專用的,因而并不能在 .aspx 代碼級(jí)進(jìn)行處理。

如果頁(yè)面想要處理某個(gè)事件,它應(yīng)該顯式地注冊(cè)相應(yīng)的處理程序。然而,為了向后兼容早期的 Visual Basic 編程風(fēng)格,ASP.NET 也支持一種隱式的事件掛起形式。在默認(rèn)情況下,頁(yè)面將嘗試把特定的方法名與事件匹配起來(lái);如果找到匹配的方法,就認(rèn)為該方法是該事件的處理程序。ASP.NET 提供了六個(gè)方法名的特定識(shí)別。它們是 Page_Init、Page_Load、Page_DataBind、Page_PreRender 和 Page_Unload。這些方法被當(dāng)作是 Page 類所提供的相應(yīng)事件的處理程序。HTTP 運(yùn)行時(shí)將自動(dòng)把這些方法與頁(yè)面事件綁定起來(lái),這樣一來(lái),開(kāi)發(fā)人員就不必編寫所需的粘接代碼。例如,名為 Page_Load 的方法與頁(yè)面的 Load 事件綁定,就像已編寫以下代碼一樣。

 
 
 
  1. this.Load += new EventHandler(this.Page_Load);  

這種自動(dòng)識(shí)別特殊名稱的功能由 @Page 指令的 AutoEventWireup 屬性控制。如果將該屬性設(shè)置為 false,則任何想要處理某個(gè)事件的應(yīng)用程序都需顯式地連接到該頁(yè)面事件。如果頁(yè)面不使用自動(dòng)事件關(guān)聯(lián)功能,就不必進(jìn)行額外的操作以匹配各名稱和事件,從而其性能也稍有提升。應(yīng)該注意的是,所有的 Microsoft Visual Studio.NET 項(xiàng)目在創(chuàng)建時(shí)都禁用了 AutoEventWireup 屬性。然而,此屬性的默認(rèn)設(shè)置為 true,意味著諸如 Page_Load 等方法會(huì)被識(shí)別并被綁定到相關(guān)的事件。

頁(yè)面的執(zhí)行過(guò)程包括下面表格中所列的一系列階段,并以具有一些應(yīng)用程序級(jí)事件和/或受保護(hù)且可重寫的方法為特征。

表格 1. ASP.NET頁(yè)面生存周期中的關(guān)鍵事件

階段

頁(yè)面事件

可重寫方法

頁(yè)面初始化

Init

 

加載視圖狀態(tài)

 

LoadViewState

處理回發(fā)數(shù)據(jù)

 

實(shí)現(xiàn) IPostBackDataHandler 接口的任何控件中的 LoadPostData 方法

加載頁(yè)面

Load

 

回發(fā)更改通知

 

實(shí)現(xiàn) IPostBackDataHandler 接口的任何控件中的 RaisePostDataChangedEvent 方法

處理回發(fā)事件

控件所定義的任何回發(fā)事件

實(shí)現(xiàn)了 IPostBackEventHandler 接口的任何控件的 RaisePostBackEvent 方法

頁(yè)面呈現(xiàn)前階段

PreRender

 

保存視圖狀態(tài)

 

SaveViewState

呈現(xiàn)頁(yè)面

 

Render

卸載頁(yè)面

Unload

 

在頁(yè)面級(jí)上,以上所列的某些階段是不可見(jiàn)的,并僅影響服務(wù)器控件編寫者和那些湊巧要?jiǎng)?chuàng)建從 Page 派生的類的開(kāi)發(fā)人員。頁(yè)面向外界發(fā)送的活動(dòng)信號(hào)僅包括 Init、Load、PreRender、Unload 以及嵌入式控件所定義的所有回發(fā)事件。

ASP.NET頁(yè)面生存周期:執(zhí)行的各個(gè)階段

頁(yè)面生存周期中的第一個(gè)階段是初始化。這一階段的標(biāo)志就是 Init 事件,在成功創(chuàng)建頁(yè)面的控件樹(shù)后,對(duì)應(yīng)用程序激發(fā)這個(gè)事件。換而言之,當(dāng) Init 事件發(fā)生時(shí),在 .aspx 源文件中靜態(tài)聲明的所有控件都已實(shí)例化并取其默認(rèn)值。控件可掛起 Init 事件,以便初始化在傳入的 Web 請(qǐng)求的生存周期中所需的任何設(shè)置。例如,此時(shí)控件可以加載外部模板文件或設(shè)置各個(gè)事件的處理程序。應(yīng)該注意到,這時(shí)還沒(méi)有視圖狀態(tài)信息可供使用。

在初始化之后,頁(yè)面框架立即加載該頁(yè)面的視圖狀態(tài)。所謂視圖狀態(tài)就是一些名稱/值對(duì)的集合,控件和頁(yè)面本身可將那些對(duì)所有 Web 請(qǐng)求都必須始終有效的任何信息存儲(chǔ)在其中。視圖狀態(tài)表示頁(yè)面的調(diào)用上下文。一般情況下,其中包含上次在服務(wù)器中處理該頁(yè)面時(shí)各控件的狀態(tài)。首次在會(huì)話中請(qǐng)求頁(yè)面時(shí),視圖狀態(tài)為空。在默認(rèn)情況下,視圖狀態(tài)被存儲(chǔ)在一個(gè)隱藏字段中,而該字段是自行添加到頁(yè)面中的。該字段名稱為 __VIEWSTATE。通過(guò)重寫 LoadViewState 方法(Control 類的一個(gè)受保護(hù)且可重寫的方法)組件開(kāi)發(fā)人員可控制如何還原視圖狀態(tài)以及如何將其內(nèi)容映射到內(nèi)部狀態(tài)。

有些方法(如 LoadPageStateFromPersistenceMedium 及其相對(duì)的 SavePageStateToPersistenceMedium)可用于將視圖狀態(tài)加載并保存到別的存儲(chǔ)介質(zhì)(例如會(huì)話、數(shù)據(jù)庫(kù)或服務(wù)器端的文件)中。與 LoadViewState 不同,上述方法僅在派生自 Page 的各個(gè)類中才可使用。

一旦還原了視圖狀態(tài),頁(yè)面樹(shù)中的各個(gè)控件的狀態(tài)就與瀏覽器上次呈現(xiàn)該頁(yè)面時(shí)這些控件所處的狀態(tài)相同。下一步包括更新這些控件的狀態(tài)以加入客戶端的變更?;匕l(fā)數(shù)據(jù)處理階段使各個(gè)控件有機(jī)會(huì)更新其狀態(tài),以便準(zhǔn)確地反映相應(yīng)的 HTML 元素在客戶端的狀態(tài)。例如,一個(gè)服務(wù)器 TextBox 控件對(duì)應(yīng)的 HTML 元素是 。在回發(fā)數(shù)據(jù)階段,TextBox 控件將檢索 標(biāo)記的當(dāng)前值并用它刷新其內(nèi)部狀態(tài)。每個(gè)控件負(fù)責(zé)從已發(fā)送的數(shù)據(jù)中提取相應(yīng)值,并更新其某些屬性。TextBox 控件將更新其 Text 屬性,而 CheckBox 控件將刷新其 Checked 屬性。服務(wù)器控件和 HTML 元素之間的匹配關(guān)系由二者的 ID 確定。

在回發(fā)數(shù)據(jù)處理階段結(jié)束時(shí),頁(yè)面中的所有控件都根據(jù)客戶端上所輸入的更改來(lái)更新原先的狀態(tài)。此時(shí),對(duì)頁(yè)面激發(fā) Load 事件。

如果在處理兩個(gè)不同的請(qǐng)求時(shí)某個(gè)敏感的屬性被修改,則頁(yè)面上可能有些控件需要完成某些任務(wù)。例如,如果在客戶端修改了某個(gè)文本框控件的文本,則該控件激發(fā) TextChanged 事件。如果利用來(lái)自客戶端的值對(duì)該控件的一個(gè)或多個(gè)屬性進(jìn)行修改,每個(gè)控件可以決定激發(fā)一個(gè)適當(dāng)?shù)氖录?duì)控件而言,如果這些更改是至關(guān)重要的,則這些控件實(shí)現(xiàn) IPostBackDataHandler 接口,在 Load 事件之后立即調(diào)用該接口的 LoadPostData 方法。通過(guò)編寫 LoadPostData 方法的代碼,一個(gè)控件可以確認(rèn)自最近一次請(qǐng)求以來(lái)是否發(fā)生了任何關(guān)鍵的更改,并激發(fā)自己的更改事件。

頁(yè)面生存周期內(nèi)的關(guān)鍵事件就是:它被調(diào)用來(lái)執(zhí)行與客戶端上所激發(fā)的某個(gè)事件相關(guān)聯(lián)的服務(wù)器端代碼。當(dāng)用戶單擊某個(gè)按鈕時(shí),頁(yè)面回發(fā)數(shù)據(jù)。已發(fā)送值的集合中包含該按鈕(該按鈕啟動(dòng)整個(gè)操作)的 ID。如果已知該控件實(shí)現(xiàn)了 IPostBackEventHandler 接口(按鈕和鏈接按鈕將實(shí)現(xiàn)此接口),則頁(yè)面框架調(diào)用 RaisePostBackEvent 方法。此方法所進(jìn)行的操作取決于相應(yīng)控件的類型。對(duì)于按鈕和鏈接按鈕,此方法查找 Click 事件處理程序并運(yùn)行相關(guān)的委托。

在處理回發(fā)事件后,頁(yè)面就準(zhǔn)備進(jìn)行呈現(xiàn)。這一階段的標(biāo)志是 PreRender 事件。各個(gè)控件可利用這個(gè)很好的時(shí)機(jī),以便執(zhí)行任何需要在保存視圖狀態(tài)和呈現(xiàn)輸出結(jié)果的前一刻完成的最后一些更新操作。下一個(gè)狀態(tài)為 SaveViewState,在這一狀態(tài)中所有控件以及頁(yè)面本身可以刷新自己的 ViewState 集合的內(nèi)容。所得到的視圖狀態(tài)隨后得以序列化、進(jìn)行哈希運(yùn)算、進(jìn)行 Base64 編碼并關(guān)聯(lián)到 __VIEWSTATE 隱藏字段。

通過(guò)重寫 Render 方法,即可更改各個(gè)控件的呈現(xiàn)機(jī)制。該方法獲取一個(gè) HTML 編寫器對(duì)象,并使用該對(duì)象聚集所有將針對(duì)該控件生成的 HTML 文本。Page 類的 Render 方法的默認(rèn)實(shí)現(xiàn)方式包括對(duì)所有成員控件的遞歸調(diào)用。對(duì)于每個(gè)控件,頁(yè)面都調(diào)用 Render 方法并將 HTML 輸出放入高速緩存。

一個(gè)頁(yè)面的最后生存標(biāo)志就是 Unload 事件,該事件在頁(yè)面對(duì)象被解除之前發(fā)生。在此事件中,您應(yīng)該釋放可能占用的任何關(guān)鍵資源(例如,文件、圖形對(duì)象、數(shù)據(jù)庫(kù)連接)。

終于,在此事件之后,瀏覽器收到 HTTP 響應(yīng)數(shù)據(jù)包并顯示頁(yè)面。

【編輯推薦】

  1. ASP.NET頁(yè)面對(duì)象模型:Page類介紹
  2. 描述ASP.NET頁(yè)面表單
  3. 介紹ASP.NET頁(yè)面
  4. 詳解ASP.NET頁(yè)面生命周期
  5. 新增ASP.NET頁(yè)面時(shí)的注意事項(xiàng)

網(wǎng)站名稱:ASP.NET頁(yè)面生存周期關(guān)鍵事件及執(zhí)行步驟
標(biāo)題鏈接:http://www.5511xx.com/article/dpiicog.html