- 新手學ASP.NET 3.5網絡開發
- 孔琳俊 陳松等編著
- 207字
- 2018-12-27 20:32:13
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.接口的相關概念和定義。
- 大話PLC(輕松動漫版)
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- iOS 9 Game Development Essentials
- Java完全自學教程
- Learning RxJava
- Practical DevOps
- 編寫高質量代碼:改善C程序代碼的125個建議
- Learning Hunk
- 基于Struts、Hibernate、Spring架構的Web應用開發
- 區塊鏈技術進階與實戰(第2版)
- Visual Basic程序設計習題與上機實踐
- uni-app跨平臺開發與應用從入門到實踐
- Oracle 12c從入門到精通(視頻教學超值版)
- Python Linux系統管理與自動化運維
- Python深度學習(第2版)