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

1 走進ASP.NET 3.5

ASP.NET 3.5是基于.NET 3.5框架的動態頁面開發技術,秉承了ASP.NET 2.0的組件開發技術,提供Web開發所需要的大部分組件,如登錄、驗證、數據源管理、數據顯示、網頁導航設計等。開發人員使用ASP.NET 3.5,不僅可以開發出美觀的界面,還可以通過后臺技術,實現數據管理、動態頁面更新等。

本章主要介紹最基本的Web開發技術,包括頁面的前臺設計和后臺實現、服務器控件的使用和動態響應等,通過本章的學習,可以開發簡單的網站,實現網站的前后臺交互和基本界面設計。

1.1 ASP.NET 3.5概述

本節從基本的網站設計入手,介紹如何使用ASP.NET 3.5方便快捷地開發網站。主要從全局入手,介紹網站設計的一些注意事項和基本配置。

1.1.1 ASP.NET 3.5——動態頁面開發利器

ASP.NET 3.5是基于C#開發語言的一種動態頁面開發技術,因為其提供了一系列網站開發所需要的組件,開發人員只需輕松拖曳就可以完成界面的設計和實現,所以被稱為動態頁面開發利器。

評判一種開發技術,需要從開發速度和運行效率來考慮。因為ASP.NET 3.5提供豐富的組件,所以其開發速度是普通Web開發技術無法比擬的,在ASP.NET 3.5中,共提供了9類組件,如圖1.1所示。最后的“常規”組件為空,不算入其中。

圖1.1 ASP.NET 3.5提供的組件

其中各類組件的基本功能如下所示。

○ 標準:提供頁面最基本的服務器控件,如按鈕、標簽、文本框等,這是常用的頁面控件。

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

○ 驗證:用來檢查頁面上用戶的輸入。比如有些文本框必須填寫、兩個密碼是否相等的檢查。

○ 導航:用來實現頁面上的各種導航組件。如常見的菜單、目錄樹等。

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

○ WebParts:常稱為Web部件,可在網頁上設計不同的區域,用戶也可以自定義網頁的區域,效果類似于現在比較流行的Blog。

○ AJAX Extensions:最新的AJAX組件,可支持動態局部刷新頁面,還可以從微軟的AJAX網站上,下載更多的AJAX組件,實現最新的Web 2.0功能。

○ 報表:封裝了最流行的水晶報表組件,可方便地定制各種財務報表。

○ HTML:最普通而又最常用的客戶端組件,一般只出現在客戶端,而不與服務器交互,如果要與服務器交互,盡量使用標準類中的組件,因為在ASP.NET 3.5中,削弱了HTML控件的服務器處理功能,所以盡量把HTML控件和標準控件區分開。

說明

HTML控件就是常說的客戶端控件,標準控件就是常說的服務器端控件。客戶端控件通常不與服務器交互,這樣可以提高頁面運行效率。

1.1.2 創建網站

前面介紹過,網站需要有一個網站地址,這樣方便用戶查找。本章從一個網站的地址和類型入手,學習創建網站的過程。

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

圖1.2 新建網站窗口

網站模板是一些已經加載好程序集的模板,如果用戶創建一個“ASP.NET Web服務”,則會自動生成一個Web服務文件,并且在web.config文件中,加載Web服務所需要的基本程序集。

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

提示

localhost表示服務器在本機。

在圖1.2中,還有兩個地方需要注意:網站所使用的.NET框架和網站的后臺語言。VS2008中提供了3種框架版本:.NET 2.0、.NET 3.0和.NET 3.5,通過圖1.2右上方的下拉框選擇具體版本。在圖的左下方,還提供一個語言下拉框,提供兩種網站開發語言:Visual C#和Visual Basic。本書所有實例都選擇Visual C#完成。

配置好網站的框架、開發語言和地址后,單擊“確定”按鈕,就可以創建一個新的網站了。

1.1.3 設計網站

設計網站,包括配置網站的各種屬性,管理網站的各個文件夾,設計網站需要的數據等。因為目前學習的網站都比較簡單,所以本小節只簡單的介紹設計網站所需要的4個方面。

(1)網站安全的設計。

ASP.NET提供了一個可視化工具來管理網站的安全。單擊“網站|ASP.NET配置”菜單,會打開一個“應用程序管理”,如圖1.3所示。其中“安全”鏈接就是用來設置網站的相關安全屬性,包括網站的用戶管理、角色管理和管理規則。

圖1.3 應用程序管理

提示

如果要正確使用“安全”鏈接,必須已經配置好web.config中有關“數據提供者”的信息,這個會在后面介紹Web開發詳細知識的時候涉及。

(2)網站個性的設計。

網站個性化設計主要就是Profile的設計,用來保存用戶的一些個人信息,如當前用戶的購物籃,再如為你自己的Blog定義的樣式。這些是Web 2.0時代的特征,即用戶個性的體現。要使網站支持個性設計,必須在web.config中啟用profile屬性“<profile enabled=true”/>。具體的使用會在第18章介紹。

(3)網站數據庫的設計。

一個完整的網站,需要保存網站需要的一些數據,如當前網站的用戶、當前論壇的所有帖子、當前Blog的所有文章,這些數據都需要一個地方存儲。ASP.NET 3.5提供了兩類數據存儲方案:數據庫和文件。其中數據庫包括SQL Server和Access,文件主要是XML文件。ASP.NET 3.5中也提供了訪問這些數據所需要的控件和類庫,開發人員可以非常方便的實現各種數據操作。

(4)網站布局(主題)的設計。

從ASP.NET 2.0開始,就支持母版頁和主題的設計,ASP.NET 3.5修訂了以前版本中的一些錯誤,同時提高了母版頁的一些嵌套調用功能。因為ASP.NET 3.5提供了母版和主題的模板,開發人員只需要添加簡單內容,就可以為網站設計統一的布局,并允許用戶自定義各種主題樣式,這些詳細的內容會在第15~17章介紹。

1.1.4 網站的前臺和后臺

新網站創建后,默認只有3個文件:web.config、Default.aspx和Default.aspx.cs。其中web.config是網站必需的配置文件,此處不講,Default.aspx是網站的前臺文件,Default.aspx.cs是網站的后臺文件。

前臺文件其實就是網頁的界面設計,一般用于呈現各種網頁布局,后臺文件用來處理用戶與服務器的各種交互,可以處理非常復雜的功能,如讀取數據、保存用戶的操作等。

1.前臺文件

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

圖1.4 前臺文件

(1)設置當前網頁的開發語言和關聯的后臺文件。“Language”屬性用來設置開發語言是“C#”,“CodeFile”用來設置與當前前臺文件關聯的后臺文件是“Default.aspx.cs ”。

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

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

提示

前臺文件,不一定必須是.aspx擴展名的文件,可以是.html擴展名。

2.后臺文件

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

圖1.5 后臺文件

(1)命名空間的引用。.NET 3.5提供了多個命名空間,用來分類封裝一些Web開發的類庫,開發人員可以直接調用這些類庫中的方法,通過幾行代碼就實現復雜的功能。應用命名空間使用“using”關鍵字,分號結束。其中“System”命名空間是最基礎的類庫,所有的頁面和窗體都必須先引用它。

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

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

用戶看到的是前臺文件,操作前臺文件后,才會調用后臺文件的內容,如果當前的界面只是用來顯示一些內容,則后臺文件不需要定義。如果要調用其他一些類庫,如要使用XML文件的類,只需要在“1”標記的地方,使用“using”引用相關的命名空間即可。

1.2 ASP.NET 3.5動態網頁剖析

既然是動態網頁,那就需要實現網頁和用戶交互的功能,這就是常說的“事件”處理。事件是一件事情的發生過程,觸發事件就是用戶操作網頁引起的網頁和服務器的交互。因為網頁一般分為前臺和后臺,所以本節介紹事件時,分別介紹了前臺事件和后臺事件。

1.2.1 前臺客戶端的事件處理

客戶端的事件一般在客戶端就可以完成,不需要與服務器進行交互,這樣就能提高頁面的響應能力。要使用客戶端事件,就需要使用客戶端控件,這些控件包含在工具箱的HTML組件中。本節通過一個實例來演示前臺客戶端的事件處理。

新建一個測試網站,在Default.aspx前臺文件中,設計如下所示的代碼。在界面中添加了兩個HTML控件:文本框和按鈕。其中為按鈕添加了單擊事件“onclick”,事件必須調用一個JavaScript方法。

    1.  <html xmlns="http://www.w3.org/1999/xhtml">
    2.  <head runat="server">
    3.     <title>無標題頁</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>

為了測試用戶單擊后是否向服務器返回數據,需要在后臺文件的“Page Load”事件中,添加一個測試項,顯示當前的時間,代碼如下所示。

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

運行這個網頁,效果如圖1.6所示。在文本框中輸入內容,單擊“提交”按鈕,如圖1.7所示,這個時候可以看到時間并沒有發生變化,即沒有觸發后臺事件,沒有與服務器交互。

圖1.6 客戶端事件實例效果

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

1.2.2 后臺服務器端的事件處理

后臺服務器端的事件,就會與服務器進行交互。這種事件一般通過服務器控件完成,除HTML控件外,其他的各類組件都是服務器控件,常用的就是“標準”控件組的內容。本節通過對上面實例的擴展,實現一個后臺事件的處理。

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

    1.  <html xmlns="http://www.w3.org/1999/xhtml">
    2.  <head runat="server">
    3.     <title>無標題頁</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”的代碼如下所示,同樣是顯示一個提示窗口,提示用戶的輸入內容。

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

為了明顯的查看是否與服務器進行了交互,還要在后臺文件的“Page Load”事件中,顯示當前的時間,代碼參考上一小節的介紹。

運行當前網頁,默認運行效果如圖1.8所示,這個與圖1.6相似。在文本框內輸入內容,然后單擊“提交”按鈕,此時可以看到,時間發生了變化,如圖1.9所示。因為只有與服務器交互,時間才會發生變化,從此處可以看出,后臺事件處理一定會與服務器進行交互。

圖1.8 服務器端事件實例效果

圖1.9 服務器端按鈕單擊后效果

1.2.3 網站處理網頁的順序和原理

既然網頁分為前臺和后臺,那么就會有一個處理順序的問題,況且前臺和后臺也不僅僅是只有一個事件。本節介紹一個網頁的完整處理過程,其實就是一個事件處理的順序,整個事件的完整處理過程,就是一個頁面的生命周期。

網頁的生命周期主要分為10步,也就是10個需要處理的事件。從用戶打開網頁開始,到網頁從服務器獲取數據,再到網頁的完全顯示,總共經歷10個事件,下面有序的介紹這10個事件,介紹順序就是網頁的處理順序。

(1)初始化對象:頁面的控件(包括頁面本身)的初始狀態。通過在后臺文件的構造函數中聲名所有對象完成,聲明對象后,頁面就知道要創建多少對象,以及這些對象的類型。頁面通過“OnInit”事件完成此操作。

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

(3)用LoadPostData處理Postback數據:在頁面創建的這個階段,服務器對頁面上的控件所提交的數據進行處理。當一個頁面被提交時,框架就在每個控件上執行一個IPostBackDataHandler接口操作。然后頁面執行LoadPostData事件解析頁面,找到每個執行了IpostBackDataHandler接口操作的控件,并用postback數據更新這些控件狀態。

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

(5)RaisePostBackChanged事件:這個事件發生在所有的控件執行了IPostBackDataHandler接口操作,并被正確的postback數據更新后。在這一步中,每個控件都被賦予一個布爾值,來標志該控件有沒有被更新。

(6)處理客戶端PostBack事件:由postback(回發)數據在服務器端引起的事件處理完后,產生postback數據的對象,就會執行RaisePostBackEvent事件。

(7)預先呈遞對象:可以改變對象,并將改變后的對象保存,此時就是這一步——預先呈遞對象。可以在這一步對控件的屬性、控件樹等結構作出最后的修改。在這一步之后,對對象的所有修改將最終被鎖定。此步通過OnPreRender事件來完成。

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

(9)呈遞給頁面:給瀏覽器輸出頁面的時候觸發的是Render事件。在Render事件中,頁面調用其中的對象并將它們呈遞給瀏覽器。這一步仍然可以做一些修改動作,不過已經與服務器無關,只是客戶端的一些顯示上的變化而已。

(10)銷毀對象:服務器把頁面呈現給瀏覽器后,所有的對象都應該被銷毀,這通過Dispose事件完成。此時應該銷毀所有在建立這個頁面時創建的對象。此步驟中,所有的處理已經完畢,所以銷毀任何對象都不會產生錯誤,包括銷毀頁面對象。

承上啟下

■ 學完本章后,讀者需要回答:

1.動態網頁是如何“動”起來的?

2.作為一種開發動態網頁的技術ASP.NET有什么優點?

3.如何創建網站?

4.ASPX頁面由哪幾部分元素構成?

5.網頁的前臺和后臺分別指什么?

6.如何利用事件對ASPX頁面作出動態響應?

7.一個網頁的生命周期有多少個事件?

■ 在下一章中,讀者將會了解:

1.類和對象的概念。

2.在C#中實現類。

3.用VS.NET管理類。

4.類的屬性和方法詳述。

5.類的繼承和重載機制。

6.接口的相關概念和定義。

主站蜘蛛池模板: 泽普县| 鄂州市| 浙江省| 青铜峡市| 内江市| 漠河县| 始兴县| 米泉市| 榆树市| 漯河市| 招远市| 蒙城县| 登封市| 巴彦淖尔市| 广德县| 沈阳市| 中阳县| 吴忠市| 抚宁县| 自治县| 邵武市| 屯留县| 赞皇县| 阳谷县| 获嘉县| 阳泉市| 新闻| 舞阳县| 德安县| 离岛区| 寿光市| 荣昌县| 鹿邑县| 明水县| 军事| 嘉峪关市| 施秉县| 芦山县| 宁化县| 叙永县| 祁连县|