第4章的網(wǎng)頁(yè)代碼模型及生命周期_第1頁(yè)
第4章的網(wǎng)頁(yè)代碼模型及生命周期_第2頁(yè)
第4章的網(wǎng)頁(yè)代碼模型及生命周期_第3頁(yè)
第4章的網(wǎng)頁(yè)代碼模型及生命周期_第4頁(yè)
第4章的網(wǎng)頁(yè)代碼模型及生命周期_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 4 章ASP.NET 的網(wǎng)頁(yè)代碼模型及生命周期從本章開(kāi)始,就進(jìn)入了ASP.NET 應(yīng)用程序開(kāi)發(fā)的世界。在了解了C#的結(jié)構(gòu),以及面象的概念后,就可以從面件開(kāi)發(fā)中的一些象的開(kāi)發(fā)ASP.NET 應(yīng)用程序。在ASP.NET 中,能夠使用面象的和軟,例如封裝、派生、繼承以及高級(jí)的設(shè)計(jì)模式等。本章首先介紹ASP.NET 中最重要的概念網(wǎng)頁(yè)代碼模型。4.1ASP.NET 的網(wǎng)頁(yè)代碼模型在 ASP.NET 應(yīng)用程序開(kāi)發(fā)中,微軟提供了大量的控件,這些控件能夠方便用戶的開(kāi)發(fā)以及。這些控件具有很強(qiáng)的擴(kuò)展能力,在開(kāi)發(fā)過(guò)程中無(wú)需自己手動(dòng)編寫(xiě)。不僅如此,用戶還能夠創(chuàng)建自定義控件進(jìn)行應(yīng)用程序開(kāi)發(fā)以擴(kuò)展現(xiàn)有的服務(wù)器控件的

2、功能。4.1.1創(chuàng)建 ASP.NET在ASP.NET 中,可以創(chuàng)建 ASP.NET和ASP.NET 應(yīng)用程序,ASP.NET的網(wǎng)頁(yè)元素包含可視元素和頁(yè)面邏輯元素,并不包含designer.cs 文件。而ASP.NET 應(yīng)用程序包含designer.cs 文件。創(chuàng)建ASP.NET,首先需要?jiǎng)?chuàng)建,單擊【文件】按鈕,在下拉菜單中選擇【新建的創(chuàng)建,如圖 4-1 所示?!窟x項(xiàng),單擊后會(huì)彈出框用于ASP.NET圖 4-1 新建ASP.NET在【位置】選項(xiàng)中,旁邊的【下拉菜單】可以按照開(kāi)發(fā)的需求來(lái)寫(xiě),一般選擇文件系統(tǒng),地址為本機(jī)的本地地址。語(yǔ)言為.NETVisual Basic。創(chuàng)建了 ASP.NET中使用

3、的語(yǔ)言,如果選擇Visual C#,則默認(rèn)的開(kāi)發(fā)語(yǔ)言為C#,否則為后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)代碼隱藏頁(yè)模型頁(yè)面 Default.aspx。ASP.NET網(wǎng)頁(yè)一般由三部分組成,這三個(gè)部分如下所示??梢曉兀喊℉TML,標(biāo)記,服務(wù)器空間。頁(yè)面邏輯元素:包括事件處理程序和代碼。designer.cs 頁(yè)文件:用來(lái)為頁(yè)面的控件做初始化工作,一般只有 ASP.NET 應(yīng)用程序( WebApplication)才有。ASP.NET 頁(yè)面中包含兩種代碼模型,一種是單文件頁(yè)模型,另一種是代碼隱藏頁(yè)模型。這兩個(gè)模型的功能完全一樣,都支持控件的拖拽,以及智能的代碼生成。4.1.2單文件頁(yè)模型單文件頁(yè)模型中的所有代碼

4、,包括控件代碼、事物處理代碼以及HTML 代碼全都包含在.aspx 文件中。編程代碼在script,并使用runat=“server”屬性標(biāo)記。創(chuàng)建一個(gè)單文件頁(yè)模型,在【文件】按鈕中選擇【新建文件】選項(xiàng),在彈出框中選擇【W(wǎng)eb 窗體】或在右擊當(dāng)前項(xiàng)目,在下拉菜單中選擇【添加新建項(xiàng)】選項(xiàng)即可創(chuàng)建一個(gè).aspx 頁(yè)面,如圖 4-2 所示。圖 4-2 創(chuàng)建單文件頁(yè)模型在創(chuàng)建時(shí),去掉【將代碼放在單獨(dú)的文件中】復(fù)選框的選擇即可創(chuàng)建單文件頁(yè)模型的ASP.NET 文件。創(chuàng)建后文件會(huì)自動(dòng)創(chuàng)建相應(yīng)的HTML 代碼以便頁(yè)面的初始化,示例代碼如下所示。95無(wú)標(biāo)題頁(yè)編譯并運(yùn)行,即可看到一個(gè)空白的頁(yè)面被運(yùn)行了。ASP.

5、NET 單文件頁(yè)模型在創(chuàng)建并生成時(shí),開(kāi)發(fā)人員編寫(xiě)的類將編譯成程序集,并將該程序集加載到應(yīng)用程序域,并對(duì)該頁(yè)的類進(jìn)行實(shí)例化后輸出到瀏覽器??梢哉f(shuō),.aspx 頁(yè)面的代碼也即將會(huì)生成一個(gè)類,并包含內(nèi)部邏輯。在瀏覽器瀏覽該頁(yè)面時(shí),.aspx頁(yè)面的類實(shí)例化并輸出到瀏覽器,反饋給瀏覽者。ASP.NET 單文件頁(yè)模型運(yùn)行示例圖如圖 4-3 所示。圖 4-3 單文件頁(yè)模型4.1.3代碼隱藏頁(yè)模型代碼隱藏頁(yè)模型與單文件頁(yè)模型不同的是,代碼隱藏頁(yè)模型將事物處理代碼都存放在 cs 文件中,當(dāng) ASP.NET 網(wǎng)頁(yè)運(yùn)行的時(shí)候,ASP.NET 類生成時(shí)會(huì)先處理 cs 文件中的代碼,再處理.aspx 頁(yè)面中的代碼。這種

6、過(guò)程被成為代碼分離。代碼分離有一種好處,就是在.aspx 頁(yè)面中,開(kāi)發(fā)可以將頁(yè)面直接作為樣式來(lái)設(shè)計(jì),即美員也可以設(shè)計(jì).aspx 頁(yè)面,而.cs 文件由程序員來(lái)完成事務(wù)處理。同時(shí),將ASP.NET 中的頁(yè)面樣式代碼和邏輯處理代碼分離能夠讓 變得簡(jiǎn)單,同時(shí)代碼看上去也非常的優(yōu)雅。在.aspx 頁(yè)面中,代碼隱藏頁(yè)模型的.aspx 頁(yè)面代碼基本上和單文件頁(yè)模型的代碼相同,不同的是在 script 標(biāo)記中的單文件頁(yè)模型的代碼默認(rèn)被放在了同名的.cs 文件中,.aspx 文件示例代碼如下所示。96無(wú)標(biāo)題頁(yè)從上述代碼中可以看出,在頭部的時(shí)候,單文件頁(yè)模型只包含Language=“C#”,而代碼隱藏頁(yè)模型包含

7、了 CodeFile=“Default.aspx.cs”,說(shuō)明被分離出去處理事物的代碼被定義在 Default.aspx.cs 中,示例代碼如下所示。上述代碼為Default.apx.cs 頁(yè)面代碼。從上述代碼可以看出,其格式與類庫(kù)、編寫(xiě)類的格式相同,這也說(shuō)明了.aspx 頁(yè)面允許使用面象的特性,如多態(tài)、繼承等。但是ASP.NET 代碼隱藏頁(yè)模型的運(yùn)行過(guò)程比單文件頁(yè)模型要復(fù)雜,運(yùn)行示例圖如圖 4-4 所示。97using System.Linq; using System.Web;using System.Web.Security; using System.Web.UI;using Syst

8、em.Web.UI.HtmlControls;/使用HtmlControlsusing System.Web.UI.WebControls;/使用WebControlsusing System.Web.UI.WebControls.Wrts;/使用Wrtspublic partial class _Default : System.Web.UI.Page/繼承自System.Web.UI.Pageprotected void Page Load(objecder, EventArgs e)圖 4-4 代碼隱藏頁(yè)模型上述描述了代碼隱藏類模型的頁(yè)面生成模型。當(dāng)頁(yè)面被呈現(xiàn)之前,ASP.NET 應(yīng)用程

9、序會(huì)解釋并編譯相應(yīng)的cs 文件中的代碼,與此同時(shí),ASP.NET 應(yīng)用程序還會(huì)將.aspx 頁(yè)面進(jìn)行編譯并生成.aspx 頁(yè)面對(duì)應(yīng)的類。生成.aspx 頁(yè)面對(duì)應(yīng)的類后會(huì)將該類與 cs 文件中的類進(jìn)行協(xié)調(diào)生成新的類,該類會(huì)通過(guò) IIS 在用戶瀏覽頁(yè)面時(shí)呈現(xiàn)在用戶的瀏覽器中。4.1.4創(chuàng)建 ASP.NET Web ApplicationASP.NET編譯成一個(gè) DLL(動(dòng)態(tài)有一種好處,就是在編譯后,編譯器將整個(gè)庫(kù)),在更新的時(shí)候,只需要更新編譯后的DLL(動(dòng)態(tài)編譯速度慢,并且類的檢查不徹底。庫(kù))文件即可。但是ASP.NET卻有一個(gè)缺點(diǎn),相比之下,ASP.NET Web Application 不僅

10、加快了速度,只生成一個(gè)程序集,而且可以拆分成多個(gè)項(xiàng)目進(jìn)行管理。創(chuàng)建 Application,首先需要新建項(xiàng)目用于開(kāi)發(fā) Web Application,單擊菜單欄上的【文件 】按鈕,在下拉菜單中選擇【新建項(xiàng)目】選項(xiàng),在彈出窗口中選擇【ASP.NET 應(yīng)用程序】選項(xiàng),如圖 4-5所示。圖 4-5 創(chuàng)建ASP.NET 應(yīng)用程序在創(chuàng)建了ASP.NET 應(yīng)用程序后,系統(tǒng)同樣會(huì)默認(rèn)創(chuàng)建一個(gè)Default.aspx 頁(yè)面,不同的是,多出了一個(gè) Default.aspx.designer.cs,用來(lái)初始化頁(yè)面控件,一般不需要修改。4.1.5ASP.NET和 ASP.NET 應(yīng)用程序的區(qū)別在 ASP.NET 中

11、,可以創(chuàng)建 ASP.NET和 ASP.NET 應(yīng)用程序,但是 ASP.NET和 ASP.NET應(yīng)用程序開(kāi)發(fā)過(guò)程和編譯過(guò)程是有區(qū)別的。ASP.NET 應(yīng)用程序主要有以下特點(diǎn):可以將ASP.NET 應(yīng)用程序拆分成多個(gè)項(xiàng)目以方便開(kāi)發(fā),管理和可以從項(xiàng)目中和源代碼管理中排除一個(gè)文件或項(xiàng)目。支持VSTS 的 Team Build 方便構(gòu)建??梢詫?duì)編譯前后的名稱,程序集等進(jìn)行自定義。98對(duì)App_GlobalResour的 Resource 強(qiáng)類支持。ASP.NET WebSite 編程模型具有以下特點(diǎn):動(dòng)態(tài)編譯該頁(yè)面,而不用編譯整個(gè)站點(diǎn)。當(dāng)一部分頁(yè)面出現(xiàn)錯(cuò)誤不會(huì)影響到其他的頁(yè)面或功能。不需要項(xiàng)目文件,可以

12、把一個(gè)目錄當(dāng)作一個(gè)Web 應(yīng)用來(lái)處理??傮w來(lái)說(shuō),ASP.NETASP.NET 應(yīng)用程序適應(yīng)大型的適用于較小的開(kāi)發(fā),因?yàn)槠鋭?dòng)態(tài)編譯的特點(diǎn),無(wú)需整站編譯。而開(kāi)發(fā)、等。4.2代碼隱藏頁(yè)模型的解釋過(guò)程在 ASP.NET 的代碼隱藏頁(yè)模型中,一個(gè)完整的.aspx 頁(yè)面包含兩個(gè)頁(yè)面,分別是以.aspx 和.cs 文件為后綴的文件,這兩個(gè)文件在形成了整個(gè) Web 窗體。在編譯的過(guò)程中都被編譯成由項(xiàng)目生成的動(dòng)態(tài)鏈接庫(kù)(.DLL),同時(shí),.aspx 頁(yè)面同樣也會(huì)編譯。但是與.cs 頁(yè)面編譯過(guò)程不同的是,當(dāng)瀏覽者第一次瀏覽到.aspx 頁(yè)面時(shí),ASP.NET 自動(dòng)生成該頁(yè)的.NET 類文件,并將其編譯成另一個(gè).D

13、LL 文件。當(dāng)瀏覽者再一次瀏覽該頁(yè)面的時(shí)候,生成的.DLL 就會(huì)在服務(wù)器上運(yùn)行,并響應(yīng)用戶在該頁(yè)面上的請(qǐng)求或響應(yīng),ASP.NET 應(yīng)用程序的解釋過(guò)程圖如 4-6 所示。圖 4-6 代碼隱藏頁(yè)模型頁(yè)面的執(zhí)行過(guò)程在客戶端瀏覽器該頁(yè)面時(shí),瀏覽器會(huì)給IIS 發(fā)送請(qǐng)求消息,IIS 則會(huì)開(kāi)始執(zhí)行ASP.NET 編譯過(guò)程,如果不存在編譯過(guò)后的 DLL 文件,則加載編譯的類并創(chuàng)建對(duì)象。當(dāng)創(chuàng)建對(duì)象完成,生成創(chuàng)建對(duì)象后的代碼并生成一個(gè) ASPX 頁(yè)面代碼,該頁(yè)面代碼反饋給 IIS,IIS 再反饋成 HTML 頁(yè)面的形式給客戶端。994.3代碼隱藏頁(yè)模型的事件驅(qū)動(dòng)處理在傳統(tǒng)的ASP 開(kāi)發(fā)中,ASP 的事件都是按照網(wǎng)

14、頁(yè)的順序來(lái)處理的,一般情況下,ASP 頁(yè)面的事件都是從上到下處理事件,可以說(shuō) ASP 的開(kāi)發(fā)是一個(gè)線性的處理模型。在用戶的瀏覽操作中,每一次用戶的操作都會(huì)導(dǎo)致頁(yè)面重新被發(fā)送到服務(wù)器。因此,重復(fù)的操作必然導(dǎo)致客戶端和服務(wù)器的往返過(guò)程,服務(wù)器必須重新創(chuàng)建頁(yè)面,當(dāng)創(chuàng)建頁(yè)面后,服務(wù)器再按照原來(lái)的從上到下的順序進(jìn)行事件處理。在ASP.NET 中,通過(guò)使用模擬事件驅(qū)動(dòng)模型的行為代替了 ASP 的線性處理模型。ASP.NET 頁(yè)框架模型隱式的為用戶建立了事件和事件處理程序的關(guān)聯(lián)。ASP.NET 讓用戶可以為從瀏覽器傳遞的事件在服務(wù)器代碼中設(shè)置相應(yīng)的處理程序。假設(shè)某個(gè)用戶正在瀏覽并與頁(yè)面之間產(chǎn)生了某種交互,用

15、戶的操作就會(huì)事件,事件通過(guò) HTTP 被傳輸?shù)椒?wù)器。在服務(wù)器中,ASP.NET 框架解釋信息,并觸發(fā)事件與之對(duì)應(yīng)的處理程序。該程序可以是.aspx 頁(yè)面中的處理程序,也可以是開(kāi)發(fā)者自定義的類庫(kù),或者 COM組件等。事件驅(qū)動(dòng)處理如圖 4-7 所示。圖 4-7頁(yè)面框架的事件驅(qū)動(dòng)處理模型上圖則說(shuō)明了當(dāng)一個(gè)瀏覽者通過(guò)瀏覽器觸發(fā)ASPX 頁(yè)面時(shí),瀏覽器、服務(wù)器和服務(wù)器返回頁(yè)的過(guò)程 。4.4ASP.NET 客戶端狀態(tài)Web 開(kāi)發(fā)不像開(kāi)發(fā),Web 應(yīng)用實(shí)際上是沒(méi)有狀態(tài)的,這就說(shuō)明Web 應(yīng)用程序不自動(dòng)指示序列中的請(qǐng)求是否來(lái)自相同的瀏覽器或客戶端,也無(wú)法判斷瀏覽器是否一直在瀏覽一個(gè)頁(yè)面或者一個(gè)站點(diǎn),也無(wú)法判

16、斷用戶執(zhí)行了哪個(gè)操作并統(tǒng)計(jì)用戶的喜好。1004.4.1視圖狀態(tài)從上面的章節(jié)中可以知道,當(dāng)服務(wù)器每次的往返過(guò)程,都將銷毀頁(yè)面并重新創(chuàng)建新的頁(yè)面。如果一個(gè)頁(yè)面中的信息超出了頁(yè)面的生命周期,那么這個(gè)頁(yè)面中的相關(guān)信息就不存在了。如果注銷了頁(yè)面的信息,那么用戶的一些信息可能就不存在了。在 ASP.NET 中,網(wǎng)頁(yè)包含視圖狀態(tài)來(lái)保存用戶的信息,視圖狀態(tài)在頁(yè)面發(fā)回到自身時(shí),跨頁(yè)過(guò)程和用戶自己的頁(yè)面的特定值,視圖狀態(tài)的優(yōu)點(diǎn)如下所示。不需要任何服務(wù)器資源。在默認(rèn)情況下,對(duì)控件啟用狀態(tài)的數(shù)據(jù)進(jìn)行,不會(huì)被破壞。視圖狀態(tài)的值經(jīng)過(guò)哈希運(yùn)算和壓縮保護(hù),安全性更高。視圖狀態(tài)同樣有一些缺點(diǎn),缺點(diǎn)如下所示。視圖狀態(tài)會(huì)影響性能,

17、如果頁(yè)面較大較多的值,則性能會(huì)有較大的影響。在,移動(dòng)終端上,可能無(wú)法保存視圖狀態(tài)中使用的值。視圖狀態(tài)雖然安全性較高,但是還是有風(fēng)險(xiǎn),如果直接查看頁(yè)面代碼,可以看到相應(yīng)代碼。4.4.2控件狀態(tài)ASP.NET 中還提供了控件狀態(tài)屬性作為在服務(wù)器往返過(guò)程中自定義控件中的數(shù)據(jù)的方法。在頁(yè)面控件中,如果有多個(gè)自定義控件使用多個(gè)不同的控件來(lái)顯示不同的數(shù)據(jù)結(jié)構(gòu),為了讓這些頁(yè)面控件能夠在在頁(yè)面上協(xié)調(diào)的工作,則需要使用控件狀態(tài)來(lái)保護(hù)控件,同時(shí),控件狀態(tài)是不能被關(guān)閉的。同樣,控件狀態(tài)也有它的優(yōu)點(diǎn),優(yōu)點(diǎn)如下所示。與視圖狀態(tài)相同的是,不需要任何服務(wù)器資源??丶顟B(tài)是不能被關(guān)閉的,提供了控件管理的更加可靠的方法??丶?/p>

18、態(tài)具有通用性。4.4.3隱藏域在ASP 中,通常使用隱藏域保存頁(yè)面的信息。在 ASP.NET 中,同樣具有隱藏域來(lái)保存頁(yè)面的信息 ,作為頁(yè)面狀態(tài)的一種形式,但是隱藏域的安全性并不高,最好不要在隱藏域保存過(guò)多的信息。隱藏域具有以下優(yōu)點(diǎn)。不需要任何服務(wù)器資源。支持廣泛,任何客戶端都支持隱藏域。實(shí)現(xiàn)簡(jiǎn)單,隱藏域?qū)儆贖TML 控件,無(wú)需像服務(wù)器控件那樣有需要編程知識(shí)。而隱藏域具有一些不足,如下所示。具有較高的安全隱患。結(jié)構(gòu)簡(jiǎn)單。同樣,如果了較多的較大的值,則會(huì)導(dǎo)致性能問(wèn)題。如果隱藏域過(guò)多,則在某些客戶端中被。隱藏域?qū)?shù)據(jù)在服務(wù)器上,而不在客戶端。101注意:如果開(kāi)發(fā)中,頁(yè)面的隱藏域過(guò)多,這些隱藏域被在

19、服務(wù)器。當(dāng)客戶端瀏覽頁(yè)面的時(shí)候,會(huì)有一止頁(yè)面些掃描頁(yè)面,。以保證操作系統(tǒng)的安全,如果頁(yè)面的隱藏域過(guò)多,那么這些可能會(huì)禁的某些功能4.4.4在客戶端用戶保存的少量的用戶信息,服務(wù)器可以通過(guò)編程的方法獲取用戶信息,信息和頁(yè)面請(qǐng)求通常一起發(fā)送到服務(wù)器,服務(wù)器對(duì)客戶端傳遞過(guò)來(lái)的信息做處理。通常保存用戶的登錄狀態(tài)、用戶名等基本信息等等,在后面的章節(jié)會(huì)詳細(xì)介紹使用 ASP.NET 操作s。4.4.5客戶端狀態(tài)雖然使用某些客戶端狀態(tài)并不使用服務(wù)器資源,但是這些狀態(tài)都具有潛在的安全隱患,如。用戶可以使用來(lái)進(jìn)行用戶信息的獲取,不過(guò)使用客戶端狀態(tài)能夠使用客戶端的資源從而提高服務(wù)器性能。使用客戶端狀態(tài),雖然有安全隱

20、患,但是具有良好的編程能力,以及基本的安全知識(shí),能夠較好的解決安全問(wèn)題,同時(shí)也能夠提高服務(wù)器性能。下面小結(jié)了一些客戶端狀態(tài)的優(yōu)缺點(diǎn)。視圖狀態(tài):當(dāng)少量揮發(fā)到自身的頁(yè)面的信息時(shí)使用。控件狀態(tài):不需要任何服務(wù)器資源,控件狀態(tài)是不能被關(guān)閉的,提供了控件管理的更加可靠和更通用的方法。隱藏域:實(shí)現(xiàn)簡(jiǎn)單,但是在應(yīng)用程序中會(huì)造成一些安全隱患。:實(shí)現(xiàn)簡(jiǎn)單,同樣也能夠簡(jiǎn)單的獲取用戶的信息,但是儲(chǔ)大量的代碼。有大小的限制,不適宜存4.5ASP.NET 頁(yè)面生命周期ASP.NET 頁(yè)面運(yùn)行時(shí),也同類的對(duì)象一樣,有自己的生命周期。ASP.NET 頁(yè)面運(yùn)行時(shí),ASP.NET頁(yè)面將經(jīng)歷一個(gè)生命周期,在生命周期內(nèi),該頁(yè)面將執(zhí)

21、行一系列的步驟,包括控件的初始化,控件的實(shí)例化,還原狀態(tài)和 狀態(tài)等,以及通過(guò)IIS 反饋給用戶呈現(xiàn)成HTML。ASP.NET 頁(yè)面生命周期是 ASP.NET 中非常重要的概念,了解 ASP.NET 頁(yè)面的生命周期,就能夠在合適的生命周期內(nèi)編寫(xiě)代碼,執(zhí)行事務(wù)。同樣,熟練掌握ASP.NET 頁(yè)面的生命周期,可以開(kāi)發(fā)高效的自定義控件。ASP.NET 生命周期通常情況下需要經(jīng)歷幾個(gè)階段,這幾個(gè)階段如下所示。頁(yè)請(qǐng)求:頁(yè)請(qǐng)求發(fā)生在頁(yè)生命周期開(kāi)始之前。當(dāng)用戶請(qǐng)求一個(gè)頁(yè)面,ASP.NET 將確定是否需要分析或者編譯該頁(yè)面,或者是否可以在不運(yùn)行頁(yè)的情況下直接請(qǐng)求緩存響應(yīng)客戶端。開(kāi)始:發(fā)生了請(qǐng)求后,頁(yè)面就進(jìn)入了開(kāi)

22、始階段。在該階段,頁(yè)面將確定請(qǐng)求是發(fā)回請(qǐng)求還是新的客戶端請(qǐng)求,并設(shè)置IstBack 屬性。初始化:在頁(yè)面開(kāi)始后,進(jìn)入了初始化階段。初始化期間,頁(yè)面可以使用服務(wù)器控件,并為每個(gè)服務(wù)器控件進(jìn)行初始化。加載:頁(yè)面加載控件。驗(yàn)證:調(diào)用所有的驗(yàn)證程序控件的Vailidate 方法,來(lái)設(shè)置各個(gè)驗(yàn)證程序控件和頁(yè)的屬性。102回發(fā)事件:如果是回發(fā)請(qǐng)求,則調(diào)用所有事件處理的程序。呈現(xiàn):在呈現(xiàn)期間,視圖狀態(tài)被保存并呈現(xiàn)到頁(yè)。卸載:完全呈現(xiàn)頁(yè)面后,將頁(yè)面發(fā)送到客戶端并準(zhǔn)備丟棄時(shí),將調(diào)用卸載。4.6ASP.NET 生命周期中的事件在頁(yè)面周期的每個(gè)階段,頁(yè)面將可運(yùn)行用戶代碼進(jìn)行處理事件。對(duì)于控件產(chǎn)生的事件,通過(guò)聲明的方

23、式執(zhí)行代碼,并將事件處理程序綁定到事件。不僅如此,事件還支持自動(dòng)事件連接,最常用的就是 Page_Load 事件了,除了Page_Load 事件以外,還有Page_Init 等其他事件,本節(jié)將會(huì)介紹此類事件。4.6.1頁(yè)面加載事件(Page_PreInit)每當(dāng)頁(yè)面被發(fā)送到服務(wù)器時(shí),頁(yè)面就會(huì)重新被加載,啟動(dòng) Page_PreInit 事件,執(zhí)行 Page_PreInit 事件代碼塊。當(dāng)需要對(duì)頁(yè)面中的控件進(jìn)行初始化時(shí),則需要使用此類事件,示例代碼如下所示。在上述代碼中,當(dāng)觸發(fā)了Page_PreInit 事件時(shí),就會(huì)執(zhí)行該事件的代碼,上述代碼將Lable1 的初始文本值設(shè)置為“OK”。Page_P

24、reInit 事件能夠讓用戶在頁(yè)面處理中,能夠讓服務(wù)器加載時(shí)只執(zhí)行一次而當(dāng)網(wǎng)頁(yè)被返回給客戶端時(shí)不被執(zhí)行。在Page_PreInit 中可以使用IstBack 來(lái)實(shí)現(xiàn),當(dāng)網(wǎng)頁(yè)第一次加載時(shí) IstBack 屬性為 false,當(dāng)頁(yè)面再次被加載時(shí),IstBack 屬性將會(huì)被設(shè)置為 true。IstBack 屬性的使用能夠影響到應(yīng)用程序的性能。4.6.2頁(yè)面加載事件(Page_Init)Page_Init 事件與Page_PreInit 事件基本相同,區(qū)別在于 Page_Init 并不能保證完全加載各個(gè)控件。雖然在 Page_Init 事件中,依舊可以頁(yè)面中的各個(gè)空間,但是當(dāng)頁(yè)面回送時(shí),Page_In

25、it 依然執(zhí)行所有的代碼并且不能通過(guò)IstBack 來(lái)執(zhí)行某些代碼,示例代碼如下所示。103protected void Page_Init(objecder, EventArgs e)/Page_Init 事件if (!IstBack)/判斷是否第一次加載Label1.Text = “OK”;/將成功信息賦值給elseLabel1.Text = “IstBack”;/將回傳的值賦值給protected void Page_PreInit(objecder, EventArgs e)/Page_PreInit 事件Label1.Text = “OK”;/賦值4.6.3頁(yè)面載入事件(Page_L

26、oad)大多數(shù)初學(xué)者會(huì)認(rèn)為Page_Load 事件是當(dāng)頁(yè)面第一次觸發(fā)的事件,其實(shí)不然,在ASP.NET 頁(yè)生命周期內(nèi),Page_Load 遠(yuǎn)遠(yuǎn)不是第一次觸發(fā)的事件,通常情況下,ASP.NET 事件順序如下所示。Page_Init()。Load ViewSe。3. Loostback data。Page_Load()。Handle control events。Page_PreRender()。Page_Render()。Unload event。9. Dise method called。Page_Load 事件是在網(wǎng)頁(yè)加載的時(shí)候一定會(huì)被執(zhí)行的事件。在Page_Load 事件中,一般都需要使用

27、IstBack 來(lái)判斷用戶是否進(jìn)行了操作,因?yàn)镮stBack 指示該頁(yè)是否正為響應(yīng)客戶端回發(fā)而加載,或者它是否正被首次加載和,示例代碼如下所示。上述代碼使用了Page_Load 事件,在頁(yè)面被創(chuàng)建時(shí),系統(tǒng)會(huì)自動(dòng)在代碼隱藏頁(yè)模型的頁(yè)面中增加此方法。當(dāng)用戶執(zhí)行了操作,頁(yè)面響應(yīng)了客戶端回發(fā),則IstBack 為 true,于是執(zhí)行 else 中的操作。4.6.4頁(yè)面卸載事件(Page_Unload)在頁(yè)面被執(zhí)行完畢后,可以通過(guò)Page_Unload 事件用來(lái)執(zhí)行頁(yè)面卸載時(shí)的清除工作,當(dāng)頁(yè)面被卸載時(shí),執(zhí)行此事件。以下情況會(huì)觸發(fā)Page_Unload 事件。頁(yè)面被關(guān)閉。數(shù)據(jù)庫(kù)連接被關(guān)閉。對(duì)象被關(guān)閉。完成

28、日志或者其他的程序請(qǐng)求。4.6.5頁(yè)面指令頁(yè)面指令用來(lái)通知編譯器在編譯頁(yè)面時(shí)做出的特殊處理。當(dāng)編譯器處理ASP.NET 應(yīng)用程序時(shí),可以通過(guò)這些特殊指令要求編譯器做特殊處理,例如緩存、使用命名空間等。當(dāng)需要執(zhí)行頁(yè)面指令時(shí),通104protected void Page_Load(objecder, EventArgs e)/Page_Load 事件if (!IstBack)Label1.Text = “OK”;/第一次執(zhí)行的代碼塊elseLabel1.Text = “IstBack”;/如果用戶提交表單等常的做法是將頁(yè)面指令包括在文件的頭部,示例代碼如下所示。PUBLIC “-/W3C/DTD

29、 XHTML 1.0 Transitional/EN” “”上述代碼中,就使用了Page 頁(yè)面指令來(lái)定義ASP.NET 頁(yè)面分析器和編譯器使用的特定頁(yè)的屬性。當(dāng)代碼隱藏頁(yè)模型的頁(yè)面被創(chuàng)建時(shí),系統(tǒng)會(huì)自動(dòng)增加Page 頁(yè)面指令。ASP.NET 頁(yè)面支持多個(gè)頁(yè)面指令,常用的頁(yè)面指令如下所示。 Page:定義ASP.NET 頁(yè)分析器和編譯器使用的頁(yè)特定(.aspx 文件)屬性,可以編寫(xiě)為。 Control:定義 ASP.NET 頁(yè)分析器和編譯器使用的用戶控件(.ascx 文件)特定的屬性。該指令只能為用戶控件配置??梢跃帉?xiě)為。 Import:將命名空間顯示導(dǎo)入到頁(yè)中,使所導(dǎo)入名空間的所有類和接口可用戶

30、該頁(yè)。導(dǎo)入名空間可以是.NET Framework 類庫(kù)或用戶定義Import namespace=“value” %。名空間的一部分??梢跃帉?xiě)為% Implements:提示當(dāng)前頁(yè)或用戶控件實(shí)現(xiàn)制定的.NET Framework 接口??梢跃帉?xiě)為。 Reference:以件進(jìn)行動(dòng)態(tài)編譯和的方式指示,應(yīng)該根據(jù)在其中此指令的頁(yè)對(duì)另一個(gè)用戶控件或頁(yè)源文。可以編寫(xiě)為。的方式空間 ASP.NET 頁(yè)或頁(yè)中包含的用戶控件的輸出緩存策略??梢詀che Duration=“#ofseconds” Location=“Any | Cnt | Downstream | Server | Outpache:以編寫(xiě)

31、為 Assembly:在編譯過(guò)程中將程序集到當(dāng)前頁(yè),以使程序集的所有類和接口都可用在該頁(yè)上??梢跃帉?xiě)為或的方式。 Register:將別名與命名空間以及類名關(guān)聯(lián)起來(lái),以便在自定義服務(wù)器控件語(yǔ)法中使用簡(jiǎn)明的表 示 法 。 可 以 編 寫(xiě) 為 或 的方式。4.7ASP.NET文件類型在ASP.NET 中包含諸多的文件類型,這些類型的文件由ASP.NET 支持和管理,而除了這些文件以外,其他的文件都由 IIS 托管。使用 VS2008 能夠創(chuàng)建大部分可以使用ASP.NET 托管運(yùn)行的程序。同時(shí) ,可以將文件類型到應(yīng)用程序。當(dāng)需要偽靜態(tài)時(shí),很可能需要將.html 后綴托管到IIS使用應(yīng)用程序中的應(yīng)用擴(kuò)

32、展,因?yàn)槟J(rèn)情況下ASP.NET 不會(huì)處理HTML 的操作。技巧:現(xiàn)在的構(gòu)架中,生成靜態(tài)是一種降低壓力的一種很好的解決方案。在某些情況下,服務(wù)器可能需要偽靜態(tài)支持,就是將.aspx 頁(yè)面后綴顯式成.html 后綴,讓搜索引擎能夠更好的搜錄。1ASP.NET 管理的文件類型ASP.NET 管理的文件類型能夠在 ASP.NET 應(yīng)用程序中被 ASP.NET 應(yīng)用程序的不同模塊進(jìn)行105!DOCTYPE html和調(diào)用,這些文件可能是用戶能夠直接類型如表 4-1 所示。的,也有可能是用戶無(wú)法直接的。ASP.NET 管理的文件表 4-1ASP.NET管理的文件類型注意:ASP.NET管理的文件類型到

33、IIS 的 Aspnet_isall。106文件類型保存位置描述.asax根目錄。Global.asax 文件。包含 HttpApplication 對(duì)象的派生代碼,用于重新展示 Application 對(duì)象。.ascx根目錄或子目錄??芍赜玫淖远x Web 控件。.ashx根目錄或子目錄。處理器文件。包含實(shí)現(xiàn) IHttpHandler 接口的代碼,用于處理輸入請(qǐng)求。.asmx根目錄或子目錄。XML Web Servi文件。包含由 SOAP 提供給其他 Web應(yīng)用的類對(duì)象和功能。.aspx根目錄或子目錄。ASP.NET Web 窗體。包含 Web 控件和其他業(yè)務(wù)邏輯。.axd根目錄。視圖文件。

34、通常是 Trace.axd。.browserApp_Browsers 目錄。瀏覽器定義文件。用于識(shí)別客戶端瀏覽器的可用特征。.cd根目錄或子目錄。類圖文件。.compiin 目錄。定位于適當(dāng)匯編集中的預(yù)編譯文件。可執(zhí)行文件(.aspx,.ascx, master,theme)預(yù)編譯后放在 Bin 目錄。.config根目錄或子目錄。Web.config 配置文件。包含用于配置 ASP.NET 若干特征的XML 元素集。.cs,.jsl,vbApp_Code 目錄。有些是 ASP.NET的代碼分離文件,位于與 Web 頁(yè)面相同的目錄。運(yùn)行時(shí)被編譯的類對(duì)象源代碼。類對(duì)象可以是 HTTP 模塊,HT

35、TP 處理器,或 ASP.NET 頁(yè)面的代碼分離文件。.csproj, vbproj, vjsprojVisual Studio 工程目錄。Visual Studio 客戶工程文件。.disco,.vsdiscoApp_WebReferen目錄。XML Web ServiDiscovery 文件。用于定位可用 Web Servi。.dsdgm, dsprototype根目錄或子目錄。分布式服務(wù)圖表(DSD)文件??商砑拥?Visual Studio 方案中,為反向引擎提供消耗 Web Servi時(shí)的交互性圖表。.dllBin 目錄。已編譯類庫(kù)文件。作為替代,可將類對(duì)象源代碼保存到App_Cod

36、e 目錄。.licx,.webinfo根目錄或子目錄。協(xié)議文件。協(xié)議有助于保護(hù)控件開(kāi)發(fā)者的知識(shí)產(chǎn)權(quán),并對(duì)控件用戶的使用權(quán)進(jìn)行驗(yàn)證。master根目錄或子目錄。模板文件定義 Web 頁(yè)面的布局,并在其他頁(yè)面中得到。mdb,.ldbApp_Data 目錄。Acs 數(shù)據(jù)庫(kù)文件。mdfApp_Data 目錄。SQLServer 數(shù)據(jù)庫(kù)文件。msgx,.svc根目錄或子目錄。Indigo Messaging Framework(MFx)服務(wù)文件。rem根目錄或子目錄。處理器文件。resourApp_GlobalResour或App_LocalResour目錄。資源文件。包含圖像,本地化文本,或其他數(shù)據(jù)的資源串。resxApp_GlobalResour或App_LocalResour目錄。資源文件。包含圖像,本地化文本,或其他數(shù)據(jù)的資源串。.sdm,.sdmDocume nt根目錄或子目錄。系統(tǒng)定義模型(SDM)文件。.sitemap根目錄。地圖文件。包含的結(jié)構(gòu)。ASP.NET 通過(guò)默認(rèn)的網(wǎng)站地圖提供者,簡(jiǎn)化導(dǎo)航控件對(duì)地圖文件的使用。.skinApp_Themes 目錄。皮

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論