官术网_书友最值得收藏!

1 走進(jìn)ASP.NET 3.5

ASP.NET 3.5是基于.NET 3.5框架的動(dòng)態(tài)頁(yè)面開(kāi)發(fā)技術(shù),秉承了ASP.NET 2.0的組件開(kāi)發(fā)技術(shù),提供Web開(kāi)發(fā)所需要的大部分組件,如登錄、驗(yàn)證、數(shù)據(jù)源管理、數(shù)據(jù)顯示、網(wǎng)頁(yè)導(dǎo)航設(shè)計(jì)等。開(kāi)發(fā)人員使用ASP.NET 3.5,不僅可以開(kāi)發(fā)出美觀的界面,還可以通過(guò)后臺(tái)技術(shù),實(shí)現(xiàn)數(shù)據(jù)管理、動(dòng)態(tài)頁(yè)面更新等。

本章主要介紹最基本的Web開(kāi)發(fā)技術(shù),包括頁(yè)面的前臺(tái)設(shè)計(jì)和后臺(tái)實(shí)現(xiàn)、服務(wù)器控件的使用和動(dòng)態(tài)響應(yīng)等,通過(guò)本章的學(xué)習(xí),可以開(kāi)發(fā)簡(jiǎn)單的網(wǎng)站,實(shí)現(xiàn)網(wǎng)站的前后臺(tái)交互和基本界面設(shè)計(jì)。

1.1 ASP.NET 3.5概述

本節(jié)從基本的網(wǎng)站設(shè)計(jì)入手,介紹如何使用ASP.NET 3.5方便快捷地開(kāi)發(fā)網(wǎng)站。主要從全局入手,介紹網(wǎng)站設(shè)計(jì)的一些注意事項(xiàng)和基本配置。

1.1.1 ASP.NET 3.5——?jiǎng)討B(tài)頁(yè)面開(kāi)發(fā)利器

ASP.NET 3.5是基于C#開(kāi)發(fā)語(yǔ)言的一種動(dòng)態(tài)頁(yè)面開(kāi)發(fā)技術(shù),因?yàn)槠涮峁┝艘幌盗芯W(wǎng)站開(kāi)發(fā)所需要的組件,開(kāi)發(fā)人員只需輕松拖曳就可以完成界面的設(shè)計(jì)和實(shí)現(xiàn),所以被稱(chēng)為動(dòng)態(tài)頁(yè)面開(kāi)發(fā)利器。

評(píng)判一種開(kāi)發(fā)技術(shù),需要從開(kāi)發(fā)速度和運(yùn)行效率來(lái)考慮。因?yàn)锳SP.NET 3.5提供豐富的組件,所以其開(kāi)發(fā)速度是普通Web開(kāi)發(fā)技術(shù)無(wú)法比擬的,在ASP.NET 3.5中,共提供了9類(lèi)組件,如圖1.1所示。最后的“常規(guī)”組件為空,不算入其中。

圖1.1 ASP.NET 3.5提供的組件

其中各類(lèi)組件的基本功能如下所示。

○ 標(biāo)準(zhǔn):提供頁(yè)面最基本的服務(wù)器控件,如按鈕、標(biāo)簽、文本框等,這是常用的頁(yè)面控件。

○ 數(shù)據(jù):包括數(shù)據(jù)顯示控件和數(shù)據(jù)源控件,數(shù)據(jù)顯示控件就是常用的網(wǎng)格控件GridView等,數(shù)據(jù)源控件就是方便讀取數(shù)據(jù)源的控件,如讀取SQL Server數(shù)據(jù)庫(kù)的SqlDataSource、支持LINQ查詢的LinqDataSource。

○ 驗(yàn)證:用來(lái)檢查頁(yè)面上用戶的輸入。比如有些文本框必須填寫(xiě)、兩個(gè)密碼是否相等的檢查。

○ 導(dǎo)航:用來(lái)實(shí)現(xiàn)頁(yè)面上的各種導(dǎo)航組件。如常見(jiàn)的菜單、目錄樹(shù)等。

○ 登錄:常用的注冊(cè)、登錄、密碼找回等控件,方便用戶的注冊(cè)和管理。

○ WebParts:常稱(chēng)為Web部件,可在網(wǎng)頁(yè)上設(shè)計(jì)不同的區(qū)域,用戶也可以自定義網(wǎng)頁(yè)的區(qū)域,效果類(lèi)似于現(xiàn)在比較流行的Blog。

○ AJAX Extensions:最新的AJAX組件,可支持動(dòng)態(tài)局部刷新頁(yè)面,還可以從微軟的AJAX網(wǎng)站上,下載更多的AJAX組件,實(shí)現(xiàn)最新的Web 2.0功能。

○ 報(bào)表:封裝了最流行的水晶報(bào)表組件,可方便地定制各種財(cái)務(wù)報(bào)表。

○ HTML:最普通而又最常用的客戶端組件,一般只出現(xiàn)在客戶端,而不與服務(wù)器交互,如果要與服務(wù)器交互,盡量使用標(biāo)準(zhǔn)類(lèi)中的組件,因?yàn)樵贏SP.NET 3.5中,削弱了HTML控件的服務(wù)器處理功能,所以盡量把HTML控件和標(biāo)準(zhǔn)控件區(qū)分開(kāi)。

說(shuō)明

HTML控件就是常說(shuō)的客戶端控件,標(biāo)準(zhǔn)控件就是常說(shuō)的服務(wù)器端控件。客戶端控件通常不與服務(wù)器交互,這樣可以提高頁(yè)面運(yùn)行效率。

1.1.2 創(chuàng)建網(wǎng)站

前面介紹過(guò),網(wǎng)站需要有一個(gè)網(wǎng)站地址,這樣方便用戶查找。本章從一個(gè)網(wǎng)站的地址和類(lèi)型入手,學(xué)習(xí)創(chuàng)建網(wǎng)站的過(guò)程。

打開(kāi)VS2008,單擊“文件|新建|網(wǎng)站”菜單,打開(kāi)新建網(wǎng)站窗口,如圖1.2所示。其中圖中標(biāo)注的兩部分需要特別注意:一是ASP.NET 3.5提供的網(wǎng)站模板,另一個(gè)是網(wǎng)站的虛擬地址。

圖1.2 新建網(wǎng)站窗口

網(wǎng)站模板是一些已經(jīng)加載好程序集的模板,如果用戶創(chuàng)建一個(gè)“ASP.NET Web服務(wù)”,則會(huì)自動(dòng)生成一個(gè)Web服務(wù)文件,并且在web.config文件中,加載Web服務(wù)所需要的基本程序集。

網(wǎng)站虛擬地址就是用戶在瀏覽器中瀏覽網(wǎng)站需要輸入的地址,本例為“localhost/WebSite”。在瀏覽器中如果要訪問(wèn)百度網(wǎng)站,只需要輸入“www.baidu.com”就可以,如果要訪問(wèn)本例創(chuàng)建的網(wǎng)站,就輸入“localhost/WebSite”。

提示

localhost表示服務(wù)器在本機(jī)。

在圖1.2中,還有兩個(gè)地方需要注意:網(wǎng)站所使用的.NET框架和網(wǎng)站的后臺(tái)語(yǔ)言。VS2008中提供了3種框架版本:.NET 2.0、.NET 3.0和.NET 3.5,通過(guò)圖1.2右上方的下拉框選擇具體版本。在圖的左下方,還提供一個(gè)語(yǔ)言下拉框,提供兩種網(wǎng)站開(kāi)發(fā)語(yǔ)言:Visual C#和Visual Basic。本書(shū)所有實(shí)例都選擇Visual C#完成。

配置好網(wǎng)站的框架、開(kāi)發(fā)語(yǔ)言和地址后,單擊“確定”按鈕,就可以創(chuàng)建一個(gè)新的網(wǎng)站了。

1.1.3 設(shè)計(jì)網(wǎng)站

設(shè)計(jì)網(wǎng)站,包括配置網(wǎng)站的各種屬性,管理網(wǎng)站的各個(gè)文件夾,設(shè)計(jì)網(wǎng)站需要的數(shù)據(jù)等。因?yàn)槟壳皩W(xué)習(xí)的網(wǎng)站都比較簡(jiǎn)單,所以本小節(jié)只簡(jiǎn)單的介紹設(shè)計(jì)網(wǎng)站所需要的4個(gè)方面。

(1)網(wǎng)站安全的設(shè)計(jì)。

ASP.NET提供了一個(gè)可視化工具來(lái)管理網(wǎng)站的安全。單擊“網(wǎng)站|ASP.NET配置”菜單,會(huì)打開(kāi)一個(gè)“應(yīng)用程序管理”,如圖1.3所示。其中“安全”鏈接就是用來(lái)設(shè)置網(wǎng)站的相關(guān)安全屬性,包括網(wǎng)站的用戶管理、角色管理和管理規(guī)則。

圖1.3 應(yīng)用程序管理

提示

如果要正確使用“安全”鏈接,必須已經(jīng)配置好web.config中有關(guān)“數(shù)據(jù)提供者”的信息,這個(gè)會(huì)在后面介紹Web開(kāi)發(fā)詳細(xì)知識(shí)的時(shí)候涉及。

(2)網(wǎng)站個(gè)性的設(shè)計(jì)。

網(wǎng)站個(gè)性化設(shè)計(jì)主要就是Profile的設(shè)計(jì),用來(lái)保存用戶的一些個(gè)人信息,如當(dāng)前用戶的購(gòu)物籃,再如為你自己的Blog定義的樣式。這些是Web 2.0時(shí)代的特征,即用戶個(gè)性的體現(xiàn)。要使網(wǎng)站支持個(gè)性設(shè)計(jì),必須在web.config中啟用profile屬性“<profile enabled=true”/>。具體的使用會(huì)在第18章介紹。

(3)網(wǎng)站數(shù)據(jù)庫(kù)的設(shè)計(jì)。

一個(gè)完整的網(wǎng)站,需要保存網(wǎng)站需要的一些數(shù)據(jù),如當(dāng)前網(wǎng)站的用戶、當(dāng)前論壇的所有帖子、當(dāng)前Blog的所有文章,這些數(shù)據(jù)都需要一個(gè)地方存儲(chǔ)。ASP.NET 3.5提供了兩類(lèi)數(shù)據(jù)存儲(chǔ)方案:數(shù)據(jù)庫(kù)和文件。其中數(shù)據(jù)庫(kù)包括SQL Server和Access,文件主要是XML文件。ASP.NET 3.5中也提供了訪問(wèn)這些數(shù)據(jù)所需要的控件和類(lèi)庫(kù),開(kāi)發(fā)人員可以非常方便的實(shí)現(xiàn)各種數(shù)據(jù)操作。

(4)網(wǎng)站布局(主題)的設(shè)計(jì)。

從ASP.NET 2.0開(kāi)始,就支持母版頁(yè)和主題的設(shè)計(jì),ASP.NET 3.5修訂了以前版本中的一些錯(cuò)誤,同時(shí)提高了母版頁(yè)的一些嵌套調(diào)用功能。因?yàn)锳SP.NET 3.5提供了母版和主題的模板,開(kāi)發(fā)人員只需要添加簡(jiǎn)單內(nèi)容,就可以為網(wǎng)站設(shè)計(jì)統(tǒng)一的布局,并允許用戶自定義各種主題樣式,這些詳細(xì)的內(nèi)容會(huì)在第15~17章介紹。

1.1.4 網(wǎng)站的前臺(tái)和后臺(tái)

新網(wǎng)站創(chuàng)建后,默認(rèn)只有3個(gè)文件:web.config、Default.aspx和Default.aspx.cs。其中web.config是網(wǎng)站必需的配置文件,此處不講,Default.aspx是網(wǎng)站的前臺(tái)文件,Default.aspx.cs是網(wǎng)站的后臺(tái)文件。

前臺(tái)文件其實(shí)就是網(wǎng)頁(yè)的界面設(shè)計(jì),一般用于呈現(xiàn)各種網(wǎng)頁(yè)布局,后臺(tái)文件用來(lái)處理用戶與服務(wù)器的各種交互,可以處理非常復(fù)雜的功能,如讀取數(shù)據(jù)、保存用戶的操作等。

1.前臺(tái)文件

打開(kāi)“Default.aspx”文件,如圖1.4所示,主要分為3部分。

圖1.4 前臺(tái)文件

(1)設(shè)置當(dāng)前網(wǎng)頁(yè)的開(kāi)發(fā)語(yǔ)言和關(guān)聯(lián)的后臺(tái)文件。“Language”屬性用來(lái)設(shè)置開(kāi)發(fā)語(yǔ)言是“C#”,“CodeFile”用來(lái)設(shè)置與當(dāng)前前臺(tái)文件關(guān)聯(lián)的后臺(tái)文件是“Default.aspx.cs ”。

(2)前臺(tái)文件的3種模式:設(shè)計(jì)、拆分和源。在設(shè)計(jì)模式下,以所見(jiàn)即所得的樣式,顯示當(dāng)前頁(yè)面的設(shè)計(jì),即程序員看到的樣式就是將來(lái)網(wǎng)頁(yè)的最終樣式。在源模式下,就是圖1.4的顯示樣式,顯示的是當(dāng)前頁(yè)面的HTML源代碼。在拆分模式下,當(dāng)前界面被分為上下兩部分:一部分是“設(shè)計(jì)”模式的內(nèi)容,一部分是“源”模式的內(nèi)容,這種可以在修改源代碼后,立刻顯示頁(yè)面最終布局。

(3)頁(yè)面的HTML源代碼,可以看到被“<html></html>”封裝的內(nèi)容,其中會(huì)包含一個(gè)窗體“form”,默認(rèn)名為“form1”,開(kāi)發(fā)人員如果要在頁(yè)面中添加控件和內(nèi)容,必須添加在此窗體內(nèi)。

提示

前臺(tái)文件,不一定必須是.aspx擴(kuò)展名的文件,可以是.html擴(kuò)展名。

2.后臺(tái)文件

打開(kāi)“Default.aspx.cs”文件,如圖1.5所示,主要包括3部分。

圖1.5 后臺(tái)文件

(1)命名空間的引用。.NET 3.5提供了多個(gè)命名空間,用來(lái)分類(lèi)封裝一些Web開(kāi)發(fā)的類(lèi)庫(kù),開(kāi)發(fā)人員可以直接調(diào)用這些類(lèi)庫(kù)中的方法,通過(guò)幾行代碼就實(shí)現(xiàn)復(fù)雜的功能。應(yīng)用命名空間使用“using”關(guān)鍵字,分號(hào)結(jié)束。其中“System”命名空間是最基礎(chǔ)的類(lèi)庫(kù),所有的頁(yè)面和窗體都必須先引用它。

(2)當(dāng)前頁(yè)面所屬的類(lèi)。默認(rèn)類(lèi)名為“ Default”,可以看到在類(lèi)定義時(shí),用到了關(guān)鍵字“partial”,其表示這個(gè)類(lèi)定義是整個(gè)類(lèi)的一部分,也就是在其他地方還有此類(lèi)的其他定義。其他定義被隱藏起來(lái),主要是對(duì)頁(yè)面中相關(guān)控件的一些定義,那些定義自動(dòng)生成,不需要開(kāi)發(fā)人員關(guān)注。

(3)默認(rèn)生成的頁(yè)面事件“Page Load”,此事件發(fā)生在頁(yè)面被加載的時(shí)候,即用戶打開(kāi)頁(yè)面的時(shí)候。所有的事件都必須有兩個(gè)參數(shù):“sender”和“e”。sender表示事件的發(fā)起者,e用來(lái)設(shè)置事件中需要的一些參數(shù)。

用戶看到的是前臺(tái)文件,操作前臺(tái)文件后,才會(huì)調(diào)用后臺(tái)文件的內(nèi)容,如果當(dāng)前的界面只是用來(lái)顯示一些內(nèi)容,則后臺(tái)文件不需要定義。如果要調(diào)用其他一些類(lèi)庫(kù),如要使用XML文件的類(lèi),只需要在“1”標(biāo)記的地方,使用“using”引用相關(guān)的命名空間即可。

1.2 ASP.NET 3.5動(dòng)態(tài)網(wǎng)頁(yè)剖析

既然是動(dòng)態(tài)網(wǎng)頁(yè),那就需要實(shí)現(xiàn)網(wǎng)頁(yè)和用戶交互的功能,這就是常說(shuō)的“事件”處理。事件是一件事情的發(fā)生過(guò)程,觸發(fā)事件就是用戶操作網(wǎng)頁(yè)引起的網(wǎng)頁(yè)和服務(wù)器的交互。因?yàn)榫W(wǎng)頁(yè)一般分為前臺(tái)和后臺(tái),所以本節(jié)介紹事件時(shí),分別介紹了前臺(tái)事件和后臺(tái)事件。

1.2.1 前臺(tái)客戶端的事件處理

客戶端的事件一般在客戶端就可以完成,不需要與服務(wù)器進(jìn)行交互,這樣就能提高頁(yè)面的響應(yīng)能力。要使用客戶端事件,就需要使用客戶端控件,這些控件包含在工具箱的HTML組件中。本節(jié)通過(guò)一個(gè)實(shí)例來(lái)演示前臺(tái)客戶端的事件處理。

新建一個(gè)測(cè)試網(wǎng)站,在Default.aspx前臺(tái)文件中,設(shè)計(jì)如下所示的代碼。在界面中添加了兩個(gè)HTML控件:文本框和按鈕。其中為按鈕添加了單擊事件“onclick”,事件必須調(diào)用一個(gè)JavaScript方法。

    1.  <html xmlns="http://www.w3.org/1999/xhtml">
    2.  <head runat="server">
    3.     <title>無(wú)標(biāo)題頁(yè)</title>
    4.     <script type="text/javascript">
    5.         function test()
    6.         {
    7.           alert("您輸入的是:"+document.getElementById("Text1").value);
    8.         }
    9.     </script>
    10. </head>
    11. <body>
    12.    <form id="form1"runat="server">
    13.    <div>
    14.        <input id="Text1"type="text"/>
    15.        <input id="Button1"type="button"value="提交"onclick="test()"/>
    16.    </div>
    17.    </form>
    18. </body>
    19.</html>

為了測(cè)試用戶單擊后是否向服務(wù)器返回?cái)?shù)據(jù),需要在后臺(tái)文件的“Page Load”事件中,添加一個(gè)測(cè)試項(xiàng),顯示當(dāng)前的時(shí)間,代碼如下所示。

    1.     protected void Page_Load(object sender,EventArgs e)
    2.     {
    3.         //顯示當(dāng)前時(shí)間
    4.         Response.Write(DateTime.Now.ToString());
    5.     }

運(yùn)行這個(gè)網(wǎng)頁(yè),效果如圖1.6所示。在文本框中輸入內(nèi)容,單擊“提交”按鈕,如圖1.7所示,這個(gè)時(shí)候可以看到時(shí)間并沒(méi)有發(fā)生變化,即沒(méi)有觸發(fā)后臺(tái)事件,沒(méi)有與服務(wù)器交互。

圖1.6 客戶端事件實(shí)例效果

圖1.7 客戶端按鈕單擊后效果

1.2.2 后臺(tái)服務(wù)器端的事件處理

后臺(tái)服務(wù)器端的事件,就會(huì)與服務(wù)器進(jìn)行交互。這種事件一般通過(guò)服務(wù)器控件完成,除HTML控件外,其他的各類(lèi)組件都是服務(wù)器控件,常用的就是“標(biāo)準(zhǔn)”控件組的內(nèi)容。本節(jié)通過(guò)對(duì)上面實(shí)例的擴(kuò)展,實(shí)現(xiàn)一個(gè)后臺(tái)事件的處理。

在Default.aspx下設(shè)計(jì)與圖1.6相似的布局,不同的是前面使用的是HTML控件,本例使用服務(wù)器端控件,代碼如下所示。這里按鈕事件同樣是使用“onclick”屬性指定,不同的是指定的內(nèi)容不再是一個(gè)JavaScript方法,而是存在于后臺(tái)文件中的一個(gè)事件“Button1 Click”。

    1.  <html xmlns="http://www.w3.org/1999/xhtml">
    2.  <head runat="server">
    3.     <title>無(wú)標(biāo)題頁(yè)</title>
    4.  </head>
    5.  <body>
    6.     <form id="form1"runat="server">
    7.     <div>
    8.
    9.         <asp:TextBox ID="TextBox1"runat="server"></asp:TextBox>
    10.        <asp:Button ID="Button1"runat="server"onclick="Button1_Click"Text="提交"/>
    11.
    12.    </div>
    13.    </form>
    14. </body>
    15. </html>

事件“Button1 Click”的代碼如下所示,同樣是顯示一個(gè)提示窗口,提示用戶的輸入內(nèi)容。

    1.     protected void Button1_Click(object sender,EventArgs e)
    2.     {
    3.         Response.Write("<script language='javascript'>
     alert('您輸入的是:"+ TextBox1.Text+"')</script>");
    4.   }

為了明顯的查看是否與服務(wù)器進(jìn)行了交互,還要在后臺(tái)文件的“Page Load”事件中,顯示當(dāng)前的時(shí)間,代碼參考上一小節(jié)的介紹。

運(yùn)行當(dāng)前網(wǎng)頁(yè),默認(rèn)運(yùn)行效果如圖1.8所示,這個(gè)與圖1.6相似。在文本框內(nèi)輸入內(nèi)容,然后單擊“提交”按鈕,此時(shí)可以看到,時(shí)間發(fā)生了變化,如圖1.9所示。因?yàn)橹挥信c服務(wù)器交互,時(shí)間才會(huì)發(fā)生變化,從此處可以看出,后臺(tái)事件處理一定會(huì)與服務(wù)器進(jìn)行交互。

圖1.8 服務(wù)器端事件實(shí)例效果

圖1.9 服務(wù)器端按鈕單擊后效果

1.2.3 網(wǎng)站處理網(wǎng)頁(yè)的順序和原理

既然網(wǎng)頁(yè)分為前臺(tái)和后臺(tái),那么就會(huì)有一個(gè)處理順序的問(wèn)題,況且前臺(tái)和后臺(tái)也不僅僅是只有一個(gè)事件。本節(jié)介紹一個(gè)網(wǎng)頁(yè)的完整處理過(guò)程,其實(shí)就是一個(gè)事件處理的順序,整個(gè)事件的完整處理過(guò)程,就是一個(gè)頁(yè)面的生命周期。

網(wǎng)頁(yè)的生命周期主要分為10步,也就是10個(gè)需要處理的事件。從用戶打開(kāi)網(wǎng)頁(yè)開(kāi)始,到網(wǎng)頁(yè)從服務(wù)器獲取數(shù)據(jù),再到網(wǎng)頁(yè)的完全顯示,總共經(jīng)歷10個(gè)事件,下面有序的介紹這10個(gè)事件,介紹順序就是網(wǎng)頁(yè)的處理順序。

(1)初始化對(duì)象:頁(yè)面的控件(包括頁(yè)面本身)的初始狀態(tài)。通過(guò)在后臺(tái)文件的構(gòu)造函數(shù)中聲名所有對(duì)象完成,聲明對(duì)象后,頁(yè)面就知道要?jiǎng)?chuàng)建多少對(duì)象,以及這些對(duì)象的類(lèi)型。頁(yè)面通過(guò)“OnInit”事件完成此操作。

(2)導(dǎo)入ViewState數(shù)據(jù):在頁(yè)面初始化事件后,所有控件就可以通過(guò)其ID被程序訪問(wèn)。在LoadViewState這個(gè)事件中,所有的控件將獲得它們的第一個(gè)屬性:ViewState屬性。這個(gè)屬性最終將被返回給服務(wù)器,以判斷這個(gè)頁(yè)面是已經(jīng)被用戶訪問(wèn)完畢,還是仍在被用戶訪問(wèn)。其實(shí)就是一個(gè)緩存控件的功能,在被服務(wù)器返回?cái)?shù)據(jù)的頁(yè)面中,查看其源代碼可以看到一個(gè)名為“ VIEWSTATE”的隱藏控件。

(3)用LoadPostData處理Postback數(shù)據(jù):在頁(yè)面創(chuàng)建的這個(gè)階段,服務(wù)器對(duì)頁(yè)面上的控件所提交的數(shù)據(jù)進(jìn)行處理。當(dāng)一個(gè)頁(yè)面被提交時(shí),框架就在每個(gè)控件上執(zhí)行一個(gè)IPostBackDataHandler接口操作。然后頁(yè)面執(zhí)行LoadPostData事件解析頁(yè)面,找到每個(gè)執(zhí)行了IpostBackDataHandler接口操作的控件,并用postback數(shù)據(jù)更新這些控件狀態(tài)。

(4)導(dǎo)入對(duì)象:導(dǎo)入對(duì)象是在Load事件中,在這里所有對(duì)象都被實(shí)例化了。所有的對(duì)象第一次被布置在DOM頁(yè)面里。這樣,對(duì)象就可以從客戶端獲得各種屬性,如寬度、高度、值、可見(jiàn)性等。

(5)RaisePostBackChanged事件:這個(gè)事件發(fā)生在所有的控件執(zhí)行了IPostBackDataHandler接口操作,并被正確的postback數(shù)據(jù)更新后。在這一步中,每個(gè)控件都被賦予一個(gè)布爾值,來(lái)標(biāo)志該控件有沒(méi)有被更新。

(6)處理客戶端PostBack事件:由postback(回發(fā))數(shù)據(jù)在服務(wù)器端引起的事件處理完后,產(chǎn)生postback數(shù)據(jù)的對(duì)象,就會(huì)執(zhí)行RaisePostBackEvent事件。

(7)預(yù)先呈遞對(duì)象:可以改變對(duì)象,并將改變后的對(duì)象保存,此時(shí)就是這一步——預(yù)先呈遞對(duì)象。可以在這一步對(duì)控件的屬性、控件樹(shù)等結(jié)構(gòu)作出最后的修改。在這一步之后,對(duì)對(duì)象的所有修改將最終被鎖定。此步通過(guò)OnPreRender事件來(lái)完成。

(8)保存ViewState:所有對(duì)頁(yè)面控件的修改完成后viewstate就被保存了。所有對(duì)象的狀態(tài)數(shù)據(jù)還是保留在一個(gè)隱藏控件里,呈現(xiàn)頁(yè)面的對(duì)象狀態(tài)數(shù)據(jù),也是從這一步中獲取。在SaveViewState事件中,其值被保存到viewstate對(duì)象中,然而這時(shí)不允許再在頁(yè)面對(duì)控件進(jìn)行修改。

(9)呈遞給頁(yè)面:給瀏覽器輸出頁(yè)面的時(shí)候觸發(fā)的是Render事件。在Render事件中,頁(yè)面調(diào)用其中的對(duì)象并將它們呈遞給瀏覽器。這一步仍然可以做一些修改動(dòng)作,不過(guò)已經(jīng)與服務(wù)器無(wú)關(guān),只是客戶端的一些顯示上的變化而已。

(10)銷(xiāo)毀對(duì)象:服務(wù)器把頁(yè)面呈現(xiàn)給瀏覽器后,所有的對(duì)象都應(yīng)該被銷(xiāo)毀,這通過(guò)Dispose事件完成。此時(shí)應(yīng)該銷(xiāo)毀所有在建立這個(gè)頁(yè)面時(shí)創(chuàng)建的對(duì)象。此步驟中,所有的處理已經(jīng)完畢,所以銷(xiāo)毀任何對(duì)象都不會(huì)產(chǎn)生錯(cuò)誤,包括銷(xiāo)毀頁(yè)面對(duì)象。

承上啟下

■ 學(xué)完本章后,讀者需要回答:

1.動(dòng)態(tài)網(wǎng)頁(yè)是如何“動(dòng)”起來(lái)的?

2.作為一種開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)ASP.NET有什么優(yōu)點(diǎn)?

3.如何創(chuàng)建網(wǎng)站?

4.ASPX頁(yè)面由哪幾部分元素構(gòu)成?

5.網(wǎng)頁(yè)的前臺(tái)和后臺(tái)分別指什么?

6.如何利用事件對(duì)ASPX頁(yè)面作出動(dòng)態(tài)響應(yīng)?

7.一個(gè)網(wǎng)頁(yè)的生命周期有多少個(gè)事件?

■ 在下一章中,讀者將會(huì)了解:

1.類(lèi)和對(duì)象的概念。

2.在C#中實(shí)現(xiàn)類(lèi)。

3.用VS.NET管理類(lèi)。

4.類(lèi)的屬性和方法詳述。

5.類(lèi)的繼承和重載機(jī)制。

6.接口的相關(guān)概念和定義。

主站蜘蛛池模板: 青龙| 印江| 杂多县| 韶山市| 玛多县| 赞皇县| 建德市| 平顺县| 德化县| 巢湖市| 凌源市| 岢岚县| 普兰县| 贵州省| 郧西县| 兰西县| 乌海市| 安丘市| 修水县| 鄂托克旗| 达日县| 烟台市| 吉木乃县| 贞丰县| 永泰县| 循化| 大姚县| 兴隆县| 昆山市| 牟定县| 阜康市| 霍州市| 绥江县| 探索| 洮南市| 广饶县| 长汀县| 鸡东县| 廊坊市| 武安市| 榆中县|