《ASP NET程序設(shè)計(jì)案例教程》課件第2章_第1頁
《ASP NET程序設(shè)計(jì)案例教程》課件第2章_第2頁
《ASP NET程序設(shè)計(jì)案例教程》課件第2章_第3頁
《ASP NET程序設(shè)計(jì)案例教程》課件第2章_第4頁
《ASP NET程序設(shè)計(jì)案例教程》課件第2章_第5頁
已閱讀5頁,還剩161頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章模塊1——會員登錄模塊2.1【任務(wù)1】創(chuàng)建簡單的Web應(yīng)用程序2.2【任務(wù)2】會員登錄實(shí)現(xiàn)2.3【任務(wù)3】會員登錄狀態(tài)管理

【本章提要】

會員登錄是所有Web應(yīng)用系統(tǒng)所必需的功能之一,本章以校園在線超市會員登錄模塊的實(shí)現(xiàn)為主線,實(shí)現(xiàn)了在VS2005中創(chuàng)建簡單應(yīng)用程序、會員登錄模塊實(shí)現(xiàn)和會員登錄狀態(tài)管理三個典型的任務(wù)。

【學(xué)習(xí)目標(biāo)】

·理解ASP.NET2.0的工作模型。

·掌握應(yīng)用程序配置方法。

·理解事件驅(qū)動編程模型。

·掌握HTML服務(wù)器控件和Web服務(wù)器控件的區(qū)別。

·掌握常用內(nèi)置對象Response和Request的使用。

·掌握Cookie對象的使用。

任務(wù)描述

熟悉Web應(yīng)用程序所需的開發(fā)環(huán)境,并創(chuàng)建一個簡單的Web應(yīng)用程序,為校園在線超市系統(tǒng)創(chuàng)建雛形,并在首頁中顯示“歡迎來到校園在線超市”。2.1【任務(wù)1】創(chuàng)建簡單的Web應(yīng)用程序

必備知識

知識1ASP.NET2.0工作模型

ASP.NET是Web服務(wù)器(IIS)的ISAPI擴(kuò)展。當(dāng)IIS接收到客戶端瀏覽器發(fā)來的請求后,它根據(jù)請求的文件類型確定由哪個ISAPI擴(kuò)展來處理該請求,并將請求轉(zhuǎn)發(fā)給ASP.NET。ASP.NET應(yīng)用程序首先進(jìn)行初始化,并裝載配置模塊,然后經(jīng)過一系列步驟來完成對客戶端請求的響應(yīng)。ASP.NET工作過程分為以下幾個階段。

1.階段1:用戶從瀏覽器中請求網(wǎng)頁(?.aspx)

當(dāng)IIS收到請求后,會對所請求文件的擴(kuò)展名進(jìn)行檢查,確定應(yīng)由哪個ISAPI擴(kuò)展來處理該項(xiàng)請求,然后將該請求傳遞給合適的ISAPI擴(kuò)展。也就是說,IIS將該項(xiàng)請求付給ASP.NET。

2.階段2:ASP.NET接收對應(yīng)用程序的第一個請求

當(dāng)ASP.NET接收到對應(yīng)用程序中任何資源的第一個請求時,應(yīng)用程序域管理器(ApplicationManager)將會創(chuàng)建一個應(yīng)用程序域;在應(yīng)用程序域中,將創(chuàng)建宿主環(huán)境(HostingEnvironment類的實(shí)例),它提供對有關(guān)程序的信息(如存儲該應(yīng)用程序的文件夾的名稱)的訪問。

3.階段3:為每個請求創(chuàng)建ASP.NET核心對象

創(chuàng)建了應(yīng)用程序域并實(shí)例化了宿主環(huán)境之后,ASP.NET將創(chuàng)建并初始化核心對象,如HttpContext、HttpRequest和HttpResponse。HttpContext類包含特定于當(dāng)前應(yīng)用程序請求的對象,如HttpRequest和HttpResponse對象。HttpRequest對象包含有關(guān)當(dāng)前請求的信息,包括Cookie和瀏覽器信息。HttpResponse對象包含發(fā)送到客戶端的響應(yīng),包括所有呈現(xiàn)的輸出和Cookie。

4.階段4:將HttpApplication對象分配給請求

初始化所有核心應(yīng)用程序?qū)ο笾?,將通過創(chuàng)建HttpApplication類的實(shí)例啟動應(yīng)用程序。如果應(yīng)用程序具有Global.asax文件,則ASP.NET會創(chuàng)建Global.asax類(從HttpApplication類派生)的一個實(shí)例,并使用該派生類表示應(yīng)用程序。同時,ASP.NET將創(chuàng)建所有已配置的模塊(如狀態(tài)管理模塊、安全管理模塊),在創(chuàng)建完所有已配置的模塊后,將調(diào)用HttpApplication類的Init方法。圖2-1說明了這種關(guān)系。

圖2-1HttpApplication對象分配

5.階段5:由HttpApplication處理請求

在此階段,將由HttpApplication類執(zhí)行一系列的事件(如BeginRequest、ValidateRequest等),并根據(jù)所請求資源的文件擴(kuò)展名(在應(yīng)用程序的配置文件中映射)選擇實(shí)現(xiàn)了HttpHandler的類來對請求進(jìn)行處理。如果該請求針對從Page派生的對象,并且需要對該項(xiàng)頁進(jìn)行編譯,則ASP.NET會在創(chuàng)建該頁的實(shí)例之前對其進(jìn)行編譯,在裝載后用該實(shí)例來處理這個請求,處理完后通過HttpResponse輸出,最后釋放該實(shí)例。知識2使用VS2005創(chuàng)建Web站點(diǎn)

1.VS2005簡介

VS2005(VisualStudio2005)是一套完整的開發(fā)工具集,用于生成ASP.NETWeb應(yīng)用程序、XMLWebServices、桌面應(yīng)用程序和移動應(yīng)用程序。它提供統(tǒng)一的集成開發(fā)環(huán)境(IDE),可使用多種開發(fā)語言(VisualBasic、VisualC++、VisualC#

和VisaulJ#),這些語言利用了

.NETFramework的功能,通過此框架可以簡化ASP.NETWeb應(yīng)用程序和XMLWebServices開發(fā)的關(guān)鍵技術(shù)。

2.VS2005中Web站點(diǎn)的類型

通過VS2005可能創(chuàng)建和配置幾種類型的Web應(yīng)用程序(也稱ASP.NET站點(diǎn)):文件系統(tǒng)站點(diǎn)、本地IIS站點(diǎn)、遠(yuǎn)程IIS站點(diǎn)和文件傳輸協(xié)議(FTP)站點(diǎn)。

1)文件系統(tǒng)站點(diǎn)

VS2005能夠?qū)⒄军c(diǎn)的文件存儲在本地硬盤上的一個文件夾中,或存儲在局域網(wǎng)上的一個共享位置。使用該類型的站點(diǎn)具有以下優(yōu)點(diǎn):

①不希望或無法在自己的計(jì)算機(jī)上安裝IIS。②文件夾中已有一組Web文件,可將這些文件作為項(xiàng)目打開。

③文件存儲在中心服務(wù)器上某一特定的文件夾中。

④在工作組設(shè)置中,工作組成員可訪問中心服務(wù)器上的公共站點(diǎn)。

使用該類型的站點(diǎn)的缺點(diǎn)是:不能使用基于HTTP的身份驗(yàn)證、應(yīng)用程序池和ISAPI篩選器等IIS功能測試文件系統(tǒng)站點(diǎn)。

2)本地IIS站點(diǎn)

一個本地Internet信息服務(wù)(IIS)站點(diǎn)就是本地計(jì)算機(jī)上的一個IISWeb應(yīng)用程序,VS2005通過使用HTTP協(xié)議可與該站點(diǎn)通信。

使用該類型站點(diǎn)的優(yōu)點(diǎn)是,可以用IIS測試站點(diǎn),從而逼真地模擬站點(diǎn)在正式服務(wù)器中的情況。相對于使用文件系統(tǒng)站點(diǎn),這更具有優(yōu)勢,因?yàn)槁窂綄凑掌湓谡椒?wù)器上的方式進(jìn)行解析。使用該類型的站點(diǎn)具有以下缺點(diǎn):

①必須裝有Internet信息服務(wù)。

②必須具有管理員權(quán)限才能創(chuàng)建或調(diào)試IIS站點(diǎn)。

③一次只有一個計(jì)算機(jī)用戶可以調(diào)試IIS站點(diǎn)。

④默認(rèn)情況下,為本地IIS站點(diǎn)啟用了遠(yuǎn)程訪問。

3)遠(yuǎn)程IIS站點(diǎn)

當(dāng)要通過使用在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行的IIS創(chuàng)建站點(diǎn)時,可使用遠(yuǎn)程站點(diǎn)。遠(yuǎn)程計(jì)算機(jī)必須配置FrontPage服務(wù)器進(jìn)行擴(kuò)展,且在站點(diǎn)級別上啟用它。

使用該類型站點(diǎn)的優(yōu)點(diǎn)如下:

①可以在部署站點(diǎn)的服務(wù)器上測試該站點(diǎn)。

②多個開發(fā)人員可以同時使用同一遠(yuǎn)程站點(diǎn)。

使用該類型的站點(diǎn)具有以下缺點(diǎn):

①遠(yuǎn)程計(jì)算機(jī)上的IIS版本必須是5.0以上版本。

②針對調(diào)試遠(yuǎn)程站點(diǎn)的配置可能很復(fù)雜。

③一次只有一個開發(fā)人員可以調(diào)試遠(yuǎn)程站點(diǎn),當(dāng)開發(fā)人員單步調(diào)試代碼時,所有其他請求均被掛起。

4)文件傳輸協(xié)議站點(diǎn)

當(dāng)某一站點(diǎn)已位于配置為FTP服務(wù)器的遠(yuǎn)程計(jì)算機(jī)上時,可使用FTP部署的站點(diǎn)。使用該類型的站點(diǎn)可以在部署FTP站點(diǎn)的服務(wù)器上測試該站點(diǎn)。然而,該類型站點(diǎn)沒有FTP部署的站點(diǎn)文件的本地副本,除非自己復(fù)制這些文件。另一方面,它不能創(chuàng)建FTP部署的站點(diǎn),只能打開一個這樣的站點(diǎn)。

3.VS2005中Web應(yīng)用的結(jié)構(gòu)

1)

ASP.NET站點(diǎn)布局

為了易于使用Web應(yīng)用程序,ASP.NET保留了某些可用于特定類型內(nèi)容的文件和文件名稱。右擊“解決方案資源管理器”中的“項(xiàng)目”→“添加ASP.NET文件夾”,可以根據(jù)項(xiàng)目需要添加特定類型內(nèi)容的文件和文件夾,如圖2-2所示。

圖2-2解決方案資源管理器

(1)默認(rèn)頁

默認(rèn)頁是在用戶定位到某一站點(diǎn)時,在沒有指定頁的情況下為用戶顯示的頁,這將使用戶容易地定位到一個站點(diǎn)。當(dāng)創(chuàng)建Web應(yīng)用程序的時候,默認(rèn)創(chuàng)建一個名為Default.aspx的頁,并將其保存在根目錄中。

(2)應(yīng)用程序文件夾

ASP.NET識別可用于特定類型內(nèi)容的文件夾名稱,以下列出了保留的文件夾名稱以及文件夾中通常包含的文件類型。①App_Browsers:包含瀏覽器定義(

.browser)文件。

②App_Code:包含作為應(yīng)用程序一部分進(jìn)行編譯的實(shí)用工具類和業(yè)務(wù)對象的源代碼或子文件夾。

③App_Data:包含應(yīng)用程序數(shù)據(jù)文件,包括MDF文件、XML文件和其他數(shù)據(jù)存儲文件。

④App_GlobalResources:包含編譯到具有全局范圍的程序集中的資源。

⑤App_LocalResources:包含與應(yīng)用程序中的特定頁、用戶控件或母版頁關(guān)聯(lián)的資源。

⑥App_Themes:包含用于定義ASP.NET網(wǎng)頁和控件外觀的文件集合。

⑦App_WebReferences:包含用于定義在應(yīng)用程序中使用的Web引用的文件、架構(gòu)和發(fā)現(xiàn)文檔文件。

⑧Bin:包含用戶要在應(yīng)用程序中引用的控件、組件或其他代碼的已編譯程序集。

2)站點(diǎn)文件類型

站點(diǎn)應(yīng)用程序中可以包含很多文件類型,某些文件類型由ASP.NET支持和管理(如

.aspx、.ascx等),而其他文件類型則由IIS服務(wù)器支持和管理(如

.html、.gif等)。表2-1列出了ASP.NET2.0中常用的文件類型及存儲位置和說明。表2-1ASP.NET2.0常用文件類型

3)創(chuàng)建簡單的Web應(yīng)用程序

ASP.NET應(yīng)用程序即是Web應(yīng)用程序,它包含了所有的文件、頁面、處理程序、模塊和可執(zhí)行代碼等。

在編寫程序之前,首先需要建立一個新網(wǎng)站。啟動VS2005開發(fā)環(huán)境,在文件菜單中選擇“新建”→“網(wǎng)站”,出現(xiàn)如圖2-3所示窗口。選擇已安裝模板“ASP.NET網(wǎng)站”,設(shè)置“位置”為“文件系統(tǒng)”,“語言”為“VisualC#”,單擊“確定”按鈕。創(chuàng)建新網(wǎng)站后的界面如圖2-4所示。

圖2-3新建ASP.NET應(yīng)用程序?qū)υ捒?/p>

圖2-4Web窗體設(shè)計(jì)界面圖2-4所示的解決方案資源管理器中,文件Default.aspx是應(yīng)用程序的默認(rèn)頁,稱為ASP.NET窗體或ASP.NET頁面。每一個ASP.NET窗體均有兩種編輯模式,即設(shè)計(jì)模式和代碼模式。設(shè)計(jì)模式下,雙擊頁面空白處,會出現(xiàn)一個Default.aspx.cs文件,這是C#

代碼文件,它所對應(yīng)的類為Default.aspx頁面文件的代碼隱藏類。也就是說,任何一個ASP.NET窗體都由兩個相關(guān)聯(lián)的文件組成,分別為頁面文件和代碼文件,這就是ASP.NET的代碼分離(隱藏)技術(shù)。如果對Default.aspx文件,用右鍵快捷菜單在瀏覽器中查看時,將會是一個空白的頁面。為了便于理解和比較,下面先看看與這個空白頁面相關(guān)的兩個文件的內(nèi)容。

Default.aspx文件的代碼:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits

="_Default"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="/1999/xhtml">

<headrunat="server">

<title>第一個Web頁</title>

</head>

<body>

<formid="form1"runat="server">

</form>

</body>

</html>這是一個HTML標(biāo)記的頁面代碼。其中,第一行指明了與之關(guān)聯(lián)的后臺代碼文件,后面將詳細(xì)介紹;form標(biāo)記的代碼行中,runat為server時,標(biāo)記為運(yùn)行在服務(wù)器端,在后續(xù)編程過程中添加的Web服務(wù)器控件均置于<form>標(biāo)記中。

Default.aspx.cs文件的代碼:

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

publicpartialclass_Default:System.Web.UI.Page{

protectedvoidPage_Load(objectsender,EventArgse){

//在此處放置用戶代碼以初始化頁面

//頁面加載時,執(zhí)行此間代碼

}}

使用using指令導(dǎo)入的構(gòu)建Web窗體所需要的命名空間,這使得命名空間中的內(nèi)容在程序中可以直接引用,如命名空間System中包含了各種數(shù)據(jù)類型及基本的輸入、輸出指令等。代碼:

publicpartialclass_Default:System.Web.UI.Page

聲明名為

_Default的類,該類繼承于System.Web.UI命名空間下的Page類。知識3Web窗體與Page類

隨著Web應(yīng)用的不斷發(fā)展,微軟在

.NET戰(zhàn)略中,提出了全新的Web應(yīng)用開發(fā)技術(shù)ASP.NET,引入了Web窗體的概念。窗體界面元素被稱為Web控件,像Windows窗體編程一樣,將Web控件拖到窗體中進(jìn)行可視化設(shè)計(jì),可大大提高Web開發(fā)的效率。

1.Web窗體

Web窗體提供了一種直觀方便的編程模型,它不僅可用于快速創(chuàng)建復(fù)雜的Web應(yīng)用程序界面,而且可以實(shí)現(xiàn)功能復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)庫訪問。

Web窗體是ASP.NET網(wǎng)頁的主容器,它的頁框架是可以在服務(wù)器上用于動態(tài)生成Web頁的可縮放公共語言運(yùn)行庫的編程模型。

Web窗體包含兩種不同代碼塊的組合:

①含有頁面布局和ASP.NET控件模板信息的HTML代碼。它負(fù)責(zé)在瀏覽器上顯示W(wǎng)eb窗體,其擴(kuò)展名為“.aspx”。②對Web窗體進(jìn)行邏輯處理的ASP.NET代碼。它負(fù)責(zé)生成在Web窗體上顯示的動態(tài)內(nèi)容,其擴(kuò)展名為“.aspx.cs”。

上述兩種代碼塊就是ASP.NET代碼分離編程模式下的界面文件和相應(yīng)的后臺代碼文件。

1)

Web窗體的主要特點(diǎn)

①基于MicrosoftASP.NET技術(shù),在服務(wù)器上運(yùn)行的代碼動態(tài)生成界面,并將之發(fā)送到瀏覽器或客戶端設(shè)備輸出。

②兼容所有瀏覽器或移動設(shè)備。ASP.NET界面自動為樣式、布局等功能呈現(xiàn)正確的、符合瀏覽器的HTML。此外,還可將ASP.NET界面設(shè)計(jì)為在特定瀏覽器上運(yùn)行,并利用瀏覽器特定的功能。③Web窗體頁幾乎可以輸出任何支持客戶端瀏覽的語言,包括HTML、XML和Script等。

④兼容.NET公共語言運(yùn)行時(CLR)所支持的任何語言,包括C#、VB.NET和Jscript.NET和J#。

⑤基于Microsoft.NETFramework生成,具有

.NETFramework的所有優(yōu)點(diǎn),包括托管環(huán)境、類型安全性和繼承。

⑥具有靈活性,可以添加用戶創(chuàng)建的控件和第三方控件。

2)

ASP.NET界面語法

ASP.NET界面文件的擴(kuò)展名為

.aspx,該類文件的語法結(jié)構(gòu)主要由以下指令、Head、窗體元素、Web服務(wù)器控件或HTML控件、客戶端腳本和服務(wù)器端腳本組成。

(1)指令

窗體文件通常包含一些指令,這些指令允許用戶為該頁指定屬性和配置信息,它們不會作為發(fā)送到瀏覽器的標(biāo)記的一部分被呈現(xiàn)。常見指令有以下幾類:

①@Page:頁面指令,此指令最為常用,允許為頁面指定多個配置選項(xiàng),常在Web窗體界面文件中的第一行使用,它定義了ASP.NET頁分析器和編譯器使用的頁面特定屬性,只能包含在

.aspx文件中,如:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"

Inherits="_Default"%>

各屬性含義見表2-2。表2-2@Page指令的主要屬性②@Control:此指令允許指定ASP.NET用戶控件。

③@Register:此指令允許注冊其他控件以便在頁面上使用。@Register指令聲明控件的標(biāo)記前綴和控件程序集的位置。如果要向頁面添加用戶控件或自定義ASP.NET控件,則必須使用此指令。

④@Master:此指令使用于特定的母版頁。

⑤@OutputCache:此指令允許指定應(yīng)緩存的頁面,并指定以下參數(shù),即何時緩存該頁、緩存該頁需要多長時間。

(2)

Head

在Head中的內(nèi)容不會被顯示(除標(biāo)題外),但它們對于瀏覽器可能是非常有用的信息,如使用的HTML版本、腳本和樣式表等內(nèi)容。

(3)

Form(窗體)元素

如果頁面包含允許用戶與頁面交互并提交該頁面的控件,則必須包含一個form元素。使用form元素必須遵循以下規(guī)則:

①頁面只能包含一個form元素。②form元素必須包含runat屬性,其屬性值設(shè)置為server時,允許在服務(wù)器代碼中以編程方式引用頁面上的窗體和控件。

③可執(zhí)行回發(fā)的服務(wù)器控件必須位于form元素之內(nèi)。

④開始標(biāo)記不得包含action屬性,ASP.NET可在處理頁面時動態(tài)設(shè)置這些屬性。

下面是一個典型的<form>標(biāo)記:

<formid="form1"method="post"runat="server">

</form>

(4)

Web服務(wù)器控件

通常,在ASP.NET頁中,都需要添加允許用戶與頁面交互的控件,包括按鈕、文本框、列表等。下面是Web服務(wù)器控件使用的示例:

<formid="form1"method="post"runat="server">

<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>

<asp:ButtonID="Button1"runat="server"Text="Button"/>

</form>

(5)將HTML控件作為服務(wù)器控件

將普通的HTML控件作為服務(wù)器控件使用,可以通過將runat=″server″屬性和ID屬性添加到頁面的任何HTML元素中。下面是HTML元素轉(zhuǎn)換為服務(wù)器控件的示例:

<inputid="Button2"runat="server"type="button"value="button"/>

(6)客戶端代碼

客戶端代碼是在瀏覽器中執(zhí)行的,因此執(zhí)行客戶端代碼不需要回發(fā)Web窗體??蛻舳舜a語言支持JavaScript、VBScript、Jscript和ECMAScript。下面是客戶端代碼示例:

<scriptlanguage="javascript"type="text/javascript">

functionButton1_onClick(){

}

</script>

(7)服務(wù)器端代碼

服務(wù)器端代碼是在服務(wù)器端執(zhí)行的,頁面代碼位于Script元素中,該元素中的開始標(biāo)記包含runat=″server″屬性。下面是服務(wù)端代碼示例:

<htmlxmlns="/1999/xhtml">

<asp:ButtonID="Button1"runat="server"Text="Button"/>

</html>

<scriptlanguage="c#"runat="server">

privatevoidButton1_Click(objectsender,System.EventArgse){

}

</script>

3)

Web窗體的生命周期

一個Web窗體的生命周期類似于在服務(wù)器中運(yùn)行的Web進(jìn)程的生命周期。Web窗體從實(shí)例化分配內(nèi)存空間到處理結(jié)束釋放內(nèi)存,一般經(jīng)歷四個步驟:初始化、頁面裝載、事件處理和資源清理。

(1)頁面初始化

頁面生命周期中的第一個階段是初始化,其標(biāo)志是Page_Init事件。當(dāng)Init事件發(fā)生時,.aspx文件中聲明的控件被實(shí)例化,并采用各自的默認(rèn)值。

(2)頁面裝載

頁面裝載在初始化之后進(jìn)行,所發(fā)生的事件為Page_Load。它根據(jù)Page.IsPostBack屬性檢查頁面是不是第一次被處理;第一次處理頁面時執(zhí)行數(shù)據(jù)綁定,或者在以后的循環(huán)過程中重新判斷數(shù)據(jù)綁定表達(dá)式;讀取或更新控件屬性;恢復(fù)所保存的前一個客戶請求的狀態(tài)。

(3)事件處理

Web窗體上的每個動作都激活一個到達(dá)服務(wù)器的事件。一個Web窗體有兩個視圖:一個客戶視圖和一個服務(wù)器視圖。所有的數(shù)據(jù)處理都在服務(wù)器上進(jìn)行。當(dāng)通過單擊鼠標(biāo)或其他方法觸發(fā)一個事件時,事件就到達(dá)服務(wù)器并返回相應(yīng)的數(shù)據(jù)。

(4)資源清理

發(fā)生于一個窗體完成了它的任務(wù),并且準(zhǔn)備卸載的時候,激活Page_Unload事件,以完成最后的資源清理工作,如關(guān)閉文件、關(guān)閉數(shù)據(jù)庫連接、釋放對象等。

2.Page類

Page類與擴(kuò)展名為

.aspx的文件相關(guān)聯(lián),用作Web應(yīng)用程序的用戶界面的控件。這些文件在運(yùn)行時被編譯為Page對象,并被緩存在服務(wù)器的內(nèi)存中。Page類有很多屬性,在編程實(shí)踐中,經(jīng)常用到的Page對象的屬性主要有IsPostBack和IsValid。

1)

IsPostBack屬性

IsPostBack屬性用于獲取一個布爾值,該值指示該頁是否為首次加載。如果IsPostBack的值為true,則表示當(dāng)前頁面是由于客戶端返回數(shù)據(jù)而加載的。新建一個Web窗體,添加一個按鈕,并在Page_Load事件響應(yīng)方法中添加如下代碼,分別查看頁面首次加載和單擊按鈕的運(yùn)行效果:

privatevoidPage_Load(objectsender,System.EventArgse){

if(!IsPostBack){

Response.Write("首次加載");

}else{

Response.Write("頁面回送");

}}

2)

IsValid屬性

獲取一個布爾值,該值指示頁面驗(yàn)證是否成功。在實(shí)際應(yīng)用中,往往會驗(yàn)證頁面提交的數(shù)據(jù)是否符合預(yù)期設(shè)定的格式要求等,如果所有符合則IsValid值為true,否則為false:

privatevoidButton1_Click(objectsender,System.EventArgse){

if(IsValid){

Response.Write("頁面驗(yàn)證通過");}

}

任務(wù)實(shí)現(xiàn)

步驟1選擇“開始”→“程序”→“MicrosoftVisualStudio2005”,出現(xiàn)如圖2-5所示的窗口。

圖2-5VisualStudio2005起始頁窗口步驟2單擊“文件”→“新建”→“網(wǎng)站”,選擇VisualStudio已安裝的模板“ASP.NET網(wǎng)站”,設(shè)置“位置”為“文件系統(tǒng)”,“語言”為“VisualC#”,單擊“確定”按鈕。

步驟3單擊解決方案中的Default.aspx頁,切換到設(shè)計(jì)視圖,輸入文字“歡迎來到校園在線超市”,如圖2-6所示。

步驟4單擊菜單“調(diào)試”→“啟動調(diào)試”,如果程序沒有錯誤,將在瀏覽器中打開Default.aspx頁面,如圖2-7所示。

圖2-6設(shè)置Default.aspx頁面

圖2-7瀏覽器中顯示Default.aspx頁面

任務(wù)描述

在校園在線超市系統(tǒng)中,注冊會員在登錄頁面輸入用戶名和密碼,點(diǎn)擊“確定”按鈕后,將在另一個頁面中顯示:“×××,歡迎進(jìn)入校園在線超市”提示信息,并顯示用戶的登錄密碼。2.2【任務(wù)2】會員登錄實(shí)現(xiàn)必備知識

知識1事件驅(qū)動編程

傳統(tǒng)的程序一般按從上至下的順序執(zhí)行,即便使用的是函數(shù),也不會改變程序的執(zhí)行順序。使用過ASP編程的程序員,對ASP的線性處理模型是有體驗(yàn)的,ASP頁面也是按照從上到下的順序處理的,其ASP代碼和靜態(tài)的HTML的每一行都按其在文件中的顯示順序進(jìn)行處理,在往返過程中通過用戶操作將頁面請求發(fā)送到服務(wù)器。然而,事件驅(qū)動編程這種模式改變了傳統(tǒng)的編程模式。

1.事件驅(qū)動編程

事件是一對象發(fā)送消息通知另一對象操作的機(jī)制,可以用于對象間的同步和信息傳遞。Windows操作系統(tǒng)是由事件驅(qū)動的,它不以順序方式執(zhí)行。Windows啟動后,就等待事件的發(fā)生。例如,當(dāng)用戶單擊“開始”按鈕時,就觸發(fā)了“開始”按鈕的單擊事件。只要發(fā)生了事件,Windows就會執(zhí)行相應(yīng)的動作以處理該事件。如果單擊了某一程序的菜單,則菜單會立即顯示出來,然后等待用戶的下一個操作。Windows是許多代碼組的集合,每個代碼組都是在事件調(diào)用時執(zhí)行的。在ASP.NET中,頁面顯示在瀏覽器上,等待用戶交互。當(dāng)用戶單擊按鈕時就發(fā)生一個事件。程序會執(zhí)行相應(yīng)代碼,以響應(yīng)事件。在代碼執(zhí)行結(jié)束時,頁面返回,繼續(xù)等待下一個事件。事件驅(qū)動編程使ASP.NET編程更接近于Windows編程。開發(fā)者只需要編寫響應(yīng)事件的代碼即可,并且可以將事件驅(qū)動編程的知識從Windows桌面應(yīng)用程序擴(kuò)展到Web應(yīng)用程序上。事件驅(qū)動編程的另一個優(yōu)點(diǎn)是可以使處理數(shù)據(jù)的代碼與頁面顯示代碼分離。ASP.NET允許開發(fā)者使用代碼分離機(jī)制將Web應(yīng)用程序邏輯(通常用C#

和VB.NET開發(fā))從表示層(通常是HTML格式)中分離出來。通過邏輯層和表示層的分離,ASP.NET允許多個頁面使用相同的代碼,從而使維護(hù)更容易。開發(fā)者不需要為了修改一個編程邏輯問題而去瀏覽HTML代碼,Web設(shè)計(jì)者也不必為了修正一個頁面錯誤而通讀所有代碼。

ASP.NET的事件可以分為以下幾類:

·HTML事件:這些事件可以在頁面上發(fā)生,并由瀏覽器在客戶端處理,如在客戶端JavaScript中運(yùn)行的彈出工具提示或菜單擴(kuò)展。

·自動觸發(fā)事件:ASP.NET頁面生成時,會自動觸發(fā)一些事件,它們不需要干涉,在用戶看到頁面之前執(zhí)行,使用這些事件可以建立頁面。

·用戶交互事件:用戶與頁面交互時觸發(fā)的事件,這些事件直接與ASP.NET的Web控件相關(guān),如Button控件的Click事件。

2.事件處理

在現(xiàn)實(shí)生活中,委托別人辦事的情況時有發(fā)生,而委托別人辦的事能不能辦好,主要取決于以下兩個方面:

·是否委托給了合適的委托對象。

·是否傳遞了解決委托事件所需要的正確和必要的信息。

例如,經(jīng)理委托他的秘書把A01項(xiàng)目策劃案拿過來。這種委托就是成功的,因?yàn)榻?jīng)理委托秘書(委托對象合適),且明確要A01項(xiàng)目的策劃案(正確和必要的信息傳遞)。

ASP.NET的事件處理采用的就是一種委托機(jī)制,如按鈕的Click事件,編程時在設(shè)計(jì)界面上雙擊按鈕,程序會自動添加事件響應(yīng)方法:

protectedvoidButton1_Click(objectsender,EventArgse){

//事件處理代碼

}

一般情況下,事件的響應(yīng)方法中都有兩個參數(shù)。一個參數(shù)代表引發(fā)事件的對象sender,由于引發(fā)事件的對象是不可預(yù)知的,因此將其聲明為Object類型(Object是所有對象的基類),適用于所有對象。另一個參數(shù)代表引發(fā)事件的具體信息,這在各種類型的事件中可能不同。第二個參數(shù)采用的EventArgs類型是事件數(shù)據(jù)類的基類,用于傳遞事件的細(xì)節(jié)。在編寫程序時,如果使用方法,只需調(diào)用方法名稱并傳遞相關(guān)參數(shù)。然而,事件的響應(yīng)方法是怎樣被關(guān)聯(lián)的呢?下面的代碼使Button1_Click事件響應(yīng)方法和Click事件相關(guān)聯(lián):

this.Button1.Click+=newSystem.EventHandler(this.Button1_Click);

這里,EventHandler就是一個委托聲明,Button1_Click方法將被自動識別,并被關(guān)聯(lián)到相應(yīng)的事件上。

知識2Web控件

通過任務(wù)一的學(xué)習(xí),我們已經(jīng)對Web窗體有了初步的了解。但是,當(dāng)我們打開一個站點(diǎn)時,會看到頁面中包含許多不同的元素,如圖片、文本框、按鈕或是超鏈接等,這些元素統(tǒng)稱為控件。控件是一個可重用的組件或者對象,它不但有自己的外觀,還有自己的屬性和方法,其中大部分控件還可以響應(yīng)特定的事件。通過VS2005的集成開發(fā)環(huán)境,可以簡單地把一個控件拖放到一個Web窗體中。

為什么會有HTML服務(wù)器控件和Web服務(wù)器控件之分呢?這是因?yàn)橐恍┛丶窃诜?wù)器端存在的。服務(wù)器端控件有自己的外觀,在客戶端瀏覽器中服務(wù)器控件的外觀由HTML代碼來表現(xiàn)。服務(wù)器控件會在初始化時,根據(jù)客戶的瀏覽器版本,自動生成適合瀏覽器的HTML代碼。

1.HTML服務(wù)器控件

所有的Html服務(wù)器控件位于System.Web.UI.HtmlControls命名空間中,從HtmlControl基類中直接或間接派生出來。HTML服務(wù)器控件與XHTML表單元素密切相關(guān)。然而HTML服務(wù)器控件可以與服務(wù)器端程序代碼交互,這些交互包括服務(wù)器端程序代碼可以動態(tài)地改變HTML控件的顯示和功能。

1)

HTML服務(wù)器控件的類型

最常用的HTML服務(wù)器控件相關(guān)類的說明如表2-3所示。

表2-3常用HTML控件及其類別2)HTML服務(wù)器控件常用屬性

(1)

InnerHtml和InnerText屬性

使用InnerHtml屬性以編程方式修改HTML服務(wù)器控件的開始和結(jié)束標(biāo)記中的內(nèi)容。InnerHtml屬性不自動對進(jìn)出HTML實(shí)體的特殊字符進(jìn)行編碼。HTML實(shí)體允許顯示特殊字符(如“<”字符),瀏覽器通常會將這些字符解釋為具有特殊含義。<字符會被解釋為標(biāo)志的開頭,并且不會在頁面上顯示。若要顯示<字符,將需要使用實(shí)體<。

使用InnerText屬性以編程方式修改HTML服務(wù)器控件的開始和結(jié)束標(biāo)記之間的內(nèi)容。與InnerHtml屬性不同,InnerText屬性自動對進(jìn)出HTML實(shí)體的特殊字符進(jìn)行編碼。

(2)

Disabled屬性

Disabled屬性被稱為禁止功能。禁止功能就是將一個對象的功能關(guān)閉,讓對象暫時無法執(zhí)行工作。所以,如果將對象的Disabled屬性設(shè)為True時,該對象會顯示為灰色,并且停止工作。只有將Disabled屬性設(shè)回False,該控件才能正常工作。以Button對象為例,若該對象的Disabled屬性被設(shè)定為True,則按鈕無法被按下。

(3)

Visible屬性

通過該屬性可以顯示或隱藏控件。

(4)

Attributes屬性

有兩個方法可以指定對象的屬性,第一種是“對象.屬性”的方式,另一種則是通過“對象.Attrbutes(″屬性名稱″)”來設(shè)置或獲取屬性。

(5)

Style屬性

該屬性可以用來設(shè)定控件的樣式。表2-4列出了Style屬性可以設(shè)定的樣式。表2-4Style屬性樣式說明

3)將HTML控件轉(zhuǎn)換成HTML服務(wù)器控件

默認(rèn)情況下,服務(wù)器無法使用ASP.NET頁面上的HTML元素,這些元素被視為傳遞給瀏覽器的不透明文本。但是,通過將HTML元素轉(zhuǎn)換成HTML服務(wù)器控件,可以將它們公開為可以在基于服務(wù)器的代碼中進(jìn)行編程的元素。通過添加runat=″server″屬性表明應(yīng)將HTML元素作為服務(wù)器控件進(jìn)行處理,再設(shè)置元素的id屬性,這樣就可以通過編程的方式引用控件。然后通過設(shè)置屬性(Attribute)來聲明服務(wù)器控件實(shí)例上的屬性(Property)參數(shù)和事件綁定等。代碼示例如下:

<inputid="Text1"type="text"runat="server"/>

<inputid="Button1"type="button"value="button"runat="server"/>

在上面的代碼示例中,通過設(shè)置id和runat=″server″屬性,將文本框和按鈕這兩個HTML控件轉(zhuǎn)換成HTML服務(wù)器控件,這樣就可以在服務(wù)器端直接訪問它們的屬性。

【例2-1】為HTML控件Button1添加服務(wù)器端單擊事件,直接讀取Text1控件的值,并輸出到頁面。

代碼如下:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Llogin.aspx.cs"

Inherits="User_Llogin"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<scriptrunat="server">

protectedvoidButton1_OnClick(objectsender,EventArgse){

Response.Write(Text1.Value);

}

</script>

<htmlxmlns="/1999/xhtml">

<headrunat="server">

<title>無標(biāo)題頁</title>

</head>

<body>

<formid="form1"runat="server">

<div>

<inputid="Text1"type="text"runat="server"/>

<inputid="Button1"type="button"value="button"runat="server"

onserverclick="Button1_OnClick"/>

</div>

</form>

</body>

</html>

運(yùn)行【例2-1】的代碼,在“Text1”文本框中輸入“你好,歡迎進(jìn)入ASP.NET世界!”后,單擊“Button1”按鈕,頁面提交,并在頁面上輸出文本框內(nèi)容。

2.Web服務(wù)器控件

ASP.NETWeb服務(wù)器控件是ASP.NET網(wǎng)頁上的對象,參與頁面的執(zhí)行過程,并在客戶端生成相應(yīng)標(biāo)記。在ASP.NET2.0中,Web服務(wù)器控件是指在服務(wù)器上執(zhí)行程序邏輯的對象,包含自己的屬性、事件和方法,當(dāng)訪問ASP.NET網(wǎng)頁時運(yùn)行對象,并調(diào)用對應(yīng)的方法。

1)

Web服務(wù)器的特性

Web服務(wù)器控件與HTML服務(wù)器控件相比,其設(shè)計(jì)側(cè)重點(diǎn)不同。它并不一對一地映射到HTML服務(wù)器控件,其中包括傳統(tǒng)的表單控件,如TextBox和Button,以及其他更高抽象級別的控件,如Calendar和DataGrid控件。它們提供了一些能夠簡化開發(fā)工作的特性,其中包括:

·豐富而一致的對象模型。WebControl基類實(shí)現(xiàn)了對所有控件通用的屬性,這些屬性包括ForeColor、BackColor、Font、Enabled等。屬性和方法的名稱是經(jīng)過精心挑選的,以提高在整個框架和該組控件中的一致性。通過這些組件實(shí)現(xiàn)的具有明確類型的對象模型將有助于減少編程錯誤。

·對瀏覽器的自動檢測:Web控件能夠自動檢測客戶機(jī)瀏覽器的功能,并相應(yīng)地調(diào)整它們所提交的HTML,從而充分發(fā)揮瀏覽器的功能。

·數(shù)據(jù)綁定:在Web窗體頁面中,可以對控件的任何屬性進(jìn)行數(shù)據(jù)綁定。此外,還有幾種Web控件可以用來提交數(shù)據(jù)源的內(nèi)容。

在HTML標(biāo)記中,Web控件會表示為具有命名空間的標(biāo)記,即帶有前綴的標(biāo)記。前綴用于將標(biāo)記映射到運(yùn)行時組件的命名空間。標(biāo)記的其余部分是運(yùn)行時類自身的名稱。與HTML控件相似,這些標(biāo)記也必須包含runat="server"屬性。下面是一個聲明的示例:

<asp:TextBoxID="TextBox1"runat="server"Text="ASP.NET示例">

</asp:TextBox>

其中,"asp"是標(biāo)記前綴,會映射到System.Web.UI.WebControls命名空間。

2)基本的Web服務(wù)器控件

ASP.NET中大致將Web服務(wù)器控件分成六大類:標(biāo)準(zhǔn)控件、數(shù)據(jù)控件、數(shù)據(jù)源控件、驗(yàn)證控件、導(dǎo)航控件和登錄控件。

任何一個應(yīng)用系統(tǒng)都包括輸入、輸出和處理部分,而輸入和輸出對用戶來說是接觸最多也最為關(guān)心的部分。在Web服務(wù)器控件中,最基本的兩個控件是Label和TextBox,它們完成了文本信息的接收輸入和顯示輸出的工作,而另一個常用控件Button則負(fù)責(zé)完成與用戶的交互,并在事件處理過程中完成系統(tǒng)的處理工作。

(1)

Label控件

Label控件是一個最簡單的控件,它主要用來以編程方式顯示W(wǎng)eb頁中的文本。當(dāng)需要使用程序來改變其顯示的文字時,只需要改變它的Text屬性即可。

Label控件常用的屬性有以下三個:

·Text:指定Label控件顯示的文字。

·ForeColor:指定Label控件顯示文字的顏色。

·Font:指定Label控件顯示文字的字體屬性,包括字體名稱、大小等。

Label控件的HTML標(biāo)簽:

<asp:LabelID="Label1"runat="server"Text="用戶名:">

</asp:Label>

或<asp:LabelID="Label1"runat="server">用戶名:</asp:Label>

設(shè)置和獲取Label控件的Text屬性值的方式:

stringusername=Label1.Text; //取值

Label1.Text=username; //設(shè)置

(2)

TextBox控件

在交互式網(wǎng)頁中,TextBox是最常用的控件之一,用于用戶輸入文本或編輯文本,并能實(shí)現(xiàn)單行、多行、密碼的顯示格式。常用屬性有:

·Text:給出或設(shè)置控件中的文本。

·TextMode:給出或設(shè)置控件的類型,其中SingleLine為單行文本框,Multiline為多行文本框,Password為密碼框,默認(rèn)值為SingleLine。

·ReadOnly:給出或設(shè)置控件內(nèi)容的只讀性。

·Wrap:給出或設(shè)置控件內(nèi)容超過控件寬度時,是否自動換行。

·AutoPostBack:給出或設(shè)置當(dāng)控件失去焦點(diǎn),且內(nèi)容已經(jīng)改變時,是否發(fā)回服務(wù)器。

·OnTextChanged:指定控件內(nèi)容發(fā)生改變時,所觸發(fā)的事件名稱。

TextBox控件的HTML標(biāo)簽:

<asp:TextBoxID="ContrUserName"runat="server"Width="150px">

</asp:TextBox>

設(shè)置和獲取名為ContrUserName的TextBox控件的Text屬性值的方式:

stringusername=ContrUserName.Text; //取值

ContrUserName.Text=username; //設(shè)置

設(shè)置ID為ContrUserPwd文本框的密碼框的方式:

ContrUserPwd.TextMode="Password";

(3)

CheckBox控件

在日常信息輸入中,我們會遇到這樣的情況,輸入的信息只有兩種可能性(如性別為男或女,婚否之類),如果采用文本輸入,則一是輸入繁瑣,二是無法對輸入信息的有效性進(jìn)行控制。這時如果采用復(fù)選控件(CheckBox),就會大大減輕數(shù)據(jù)輸入人員的負(fù)擔(dān),同時輸入數(shù)據(jù)的規(guī)范性也得到了保證。其HTML標(biāo)簽如下:

<asp:CheckBoxID="CheckBox1"runat="server"Checked="false"/>

CheckBox的常用屬性有:

·Checked:給出或設(shè)置控件的選擇狀態(tài),為True代表選中,為False為未選中。

·AutoPostBack:給出或設(shè)置當(dāng)控件失去焦點(diǎn),且狀態(tài)改變時,是否發(fā)回服務(wù)器。

當(dāng)CheckBox控件的狀態(tài)在向服務(wù)器發(fā)送過程間更改時,將引發(fā)CheckedChanged事件??梢詾镃heckedChanged事件提供事件處理程序,以便在向服務(wù)器的各次發(fā)送過程中,CheckBox控件的狀態(tài)發(fā)生改變時執(zhí)行特定的任務(wù)。

當(dāng)創(chuàng)建多個CheckBox控件時,還可以使用CheckBoxList控件。對于使用數(shù)據(jù)綁定創(chuàng)建一組復(fù)選框而言,CheckBoxList控件更易于使用(我們將在后面的章節(jié)中為大家介紹),而各個CheckBox控件則可以更好地控制布局。

默認(rèn)情況下,CheckBox控件在被單擊時不會自動向服務(wù)器發(fā)送窗體。若要啟用自動發(fā)送,應(yīng)將AutoPostBack屬性設(shè)置為true。下例顯示了如何使用CheckBox控件。

【例2-2】CheckBox的使用。

設(shè)置CheckBox1的AutoPostBack屬性為true,并編寫CheckBox1的CheckedChanged事件代碼如下:

protectedvoidCheckBox1_CheckedChanged(objectsender,EventArgse){

TextBox2.Text=TextBox1.Text;

}

當(dāng)選中“同聯(lián)系人”復(fù)選框時,運(yùn)行結(jié)果如圖2-8所示。

圖2-8CheckBox的使用

(4)

Button控件

Button控件允許在Web窗體上創(chuàng)建普通按鈕。Button控件的HTML標(biāo)簽如下:

<asp:ButtonID="Button1"runat="server"Text="確定"/>

設(shè)置Button控件的Text屬性值的方式:

Button1.Text="確定";

當(dāng)用戶單擊按鈕時觸發(fā)按鈕的Click事件,可以在其事件處理過程中完成頁面的提交以及事務(wù)處理。

Click事件處理方法:

protectedvoidButton1_Click(objectsender,EventArgse){

//事件處理代碼

}

可以為Click事件提供事件處理程序,在事件處理程序中可以通過編程的方式控制單擊Button按鈕時執(zhí)行的操作。

添加屬性:

privatevoidPage_Load(objectsender,System.EventArgse){

Button1.Attributes.Add("OnClick","javascript:

returnconfirm(′確定嗎?′);");

}上述代碼在頁面裝載事件中,給按鈕添加了屬性。當(dāng)按鈕被單擊時,首先彈出一個“確認(rèn)”對話框供用戶選擇。對于重要的操作,如保存、刪除等,這種友好的提示是必要的。

【例2-3】Button控件的使用,如圖2-9所示。

圖2-9Button控件的使用實(shí)現(xiàn)代碼如下:

protectedvoidPage_Load(objectsender,EventArgse){

Button1.Attributes.Add("OnClick","javascript:

returnconfirm('你確定提交嗎?')");

}

protectedvoidButton1_Click(objectsender,EventArgse){

Label2.Text="恭喜,你點(diǎn)擊了提交按鈕!";

}

3)設(shè)置控件的Tab鍵順序和焦點(diǎn)

若要增強(qiáng)在ASP.NET網(wǎng)頁中使用控件的用戶體驗(yàn),可以指定網(wǎng)頁中各控件的Tab鍵順序。用戶通過敲擊Tab鍵,即可按設(shè)置的順序在控件中移動焦點(diǎn),并可以指定最初打開網(wǎng)頁時具有焦點(diǎn)的默認(rèn)控件,讓頁面一打開就可以將焦點(diǎn)定位到某一控件上。

(1)

Tab鍵順序

在大多數(shù)瀏覽器中,控件的Tab鍵順序是按控件在頁中添加的順序來移動的。通過設(shè)置控件的TabIndex屬性,可以控制其Tab鍵順序。例如,在IE中,Tab鍵的順序按控件的TabIndex順序增加,因此,當(dāng)用戶從一個TabIndex屬性為2的控件移出時,焦點(diǎn)將自動定位到TabIndex值為3(或更大)的控件上。

(2)焦點(diǎn)

在瀏覽器中打開網(wǎng)頁時,由瀏覽器確定網(wǎng)頁中哪個控件應(yīng)具有焦點(diǎn)。一般來說,瀏覽器最初將焦點(diǎn)定位在瀏覽器窗口本身或該頁的第一個控件上。如果要使某個特定控件獲得焦點(diǎn),則可以通過服務(wù)器代碼設(shè)置默認(rèn)焦點(diǎn),具體可以通過以下三種方式。

①調(diào)用該控件的Focus方法:

protectedvoidPage_Load(objectsender,EventArgse){

TextBox1.Focus();

}

上述代碼通過在Page_Load事件中調(diào)用控件TextBox1的方法Focus,將默認(rèn)焦點(diǎn)設(shè)置在TextBox1控件上。

②調(diào)用頁的SetFocus方法:

protectedvoidPage_Load(objectsender,EventArgse){

this.SetFocus("TextBox1");

}

上述代碼通過調(diào)用頁面的SetFocus方法,將要設(shè)置默認(rèn)焦點(diǎn)的TextBox1控件的ID賦給方法,從而將默認(rèn)焦點(diǎn)設(shè)置在該控件上。③在窗體或面板中設(shè)置默認(rèn)焦點(diǎn):

<formid="form1"runat="server"defaultfocus="TextBox1">

<div>

<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>

<asp:ButtonID="Button1"runat="server"Text="Button"/>

</div>

</form>上述代碼通過調(diào)用設(shè)置form元素的屬性defaultfocus,為要獲得默認(rèn)焦點(diǎn)的控件的ID值設(shè)置默認(rèn)焦點(diǎn)。

知識3Response對象和Request對象

Web應(yīng)用開發(fā)中很重要的一個問題就是在Web頁面之間的信息傳遞和狀態(tài)維護(hù)。ASP.NET提供了一些內(nèi)置對象,如Response、Request、Session、Application、Server對象等,以幫助Web開發(fā)人員來管理Web頁面間的狀態(tài),從而實(shí)現(xiàn)特定的功能??紤]任務(wù)二實(shí)現(xiàn)的需要,我們先討論Response對象和Request對象。

1.Response對象

Response對象用于輸出數(shù)據(jù)到客戶端,包括向?yàn)g覽器輸出數(shù)據(jù)、重定向?yàn)g覽器到另一個URL或者停止輸出數(shù)據(jù)。Response對象是屬于Page對象的成員,不用聲明便可以直接使用,其對應(yīng)HttpResponse類,命名空間為System.Web。

1)向?yàn)g覽器輸出數(shù)據(jù)

在Web開發(fā)中使用最頻繁的語句是顯示文本。Response對象提供了Write方法來完成這一功能。如:

Response.Write("這是向?yàn)g覽器輸出的字符串");

除了可以將指定的字符串輸出到客戶端瀏覽器,也可以把HTML標(biāo)記輸出到客戶端瀏覽器。

Response.Write("<h2>軟件技術(shù)</h2>");

上面的HTML標(biāo)簽<h2>和</h2>將與文本一起被發(fā)送到客戶端,客戶端瀏覽器會識別這些HTML標(biāo)記并在Web頁再顯示為正確的形式。

使用Write方法還可以輸出JavaScript腳本,客戶端瀏覽器會識別并執(zhí)行這些腳本程序。例如:

Response.Write("<scriptlanguage=\"javascript\">

alert('歡迎使用ASP.NET')</script>");

上面的代碼是向客戶端輸出一段JavaScript腳本代碼,實(shí)現(xiàn)在客戶端彈出一個信息提示框的功能,如圖2-10所示。

圖2-10Response對象的使用

2)頁面重定向

利用Response.Redirect方法可以實(shí)現(xiàn)頁面重定向,可以由一個頁面地址轉(zhuǎn)到另一個頁面地址或URL地址。下面的代碼表示從當(dāng)前頁轉(zhuǎn)到名為Test.aspx的頁面。

Response.Redirect("Test.aspx");

通常,從一個頁面跳轉(zhuǎn)至另一個頁面時,還需要傳遞一些信息,Response.Redirect方法在頁面跳轉(zhuǎn)時,可以向另一個頁面?zhèn)鬟f一些參數(shù),如:

Response.Redirect("Test.aspx?uid=Zhangsan");

上述代碼在完成向Test.aspx定向時,將參數(shù)uid及其對應(yīng)的值也傳遞給Test.aspx頁。

3)停止輸出

當(dāng)ASP.NET文件執(zhí)行時,如果遇到Response.End方法,就自動停止輸出數(shù)據(jù),如:

for(inti=1;i<=7;i++){

if(i==6){

Response.Write("快樂周末!")

Response.End();

}

Response.Write(i);

}

上述代碼輸出為:12345快樂周末!。

2.Request對象

Request對象的主要功能是從客戶端得到數(shù)據(jù)。通過使用Request對象,可以訪問基于表單的數(shù)據(jù)和通過URL發(fā)送的參數(shù)列表信息,而且還可以接收來自用戶Cookie的信息。Request對象是屬于Page對象的成員,不用聲明便可以直接使用,其對應(yīng)HttpRequest類,命名空間為System.Web。

1)獲取頁面?zhèn)鬟f的數(shù)據(jù)

在頁面中設(shè)置傳遞的數(shù)據(jù):

Response.Redirect("Test.aspx?uid=Zhangsan");

獲取傳遞的數(shù)據(jù):

stringuid=Request["uid"].ToString();

2)獲取URL信息

獲取站點(diǎn)根目錄:Request.Url.Host。

獲取應(yīng)用程序目錄:Request.ApplicationPath。

獲取物理文件系統(tǒng)路徑:Request.PhysicalApplicationPath。

3)得到客戶端的信息

利用Request對象內(nèi)置的屬性可以得到一些客戶端的信息。

客戶端瀏覽器版本:Request.UserAgent。

客戶端IP地址:Request.UserHostAddress。

【例2-4】Request對象的使用,如圖2-11所示。

獲取客戶端瀏覽器版本信息的代碼如下:

protectedvoidButton1_Click(objectsender,EventArgse)

{

Label2.Text=Request.UserAgent.ToString();

}

獲取客戶端的IP地址的代碼如下:

protectedvoidButton2_Click(objectsender,EventArgse)

{

Label2.Text=Request.UserHostAddress.ToString();

}

圖2-11Request對象的使用傳遞參數(shù)的代碼如下:

protectedvoidButton3_Click(objectsender,EventArgse)

{

stringuserText="張三";

Response.Redirect("Test.aspx?uid="+userText);

}

在Test.aspx頁中獲取傳遞的參數(shù),值得注意的是獲取傳遞參數(shù)時,需要判斷參數(shù)值是否為空:

protectedvoidPage_Load(objectsender,EventArgse)

{

if(Request["uid"]!=null)

{

Response.Write("<br>"+Request["uid"].ToString()+",歡迎你!");

}

}

任務(wù)實(shí)現(xiàn)

步驟1新建名為Login.aspx的頁面,在其中添加Label控件、TextBox控件和Button控件,并按表2-5設(shè)置各控件相應(yīng)的屬性表2-5界面控件設(shè)置

圖2-12登錄界面設(shè)計(jì)步驟2雙擊“確定”按鈕,為btnConfirm控件添加事件處理程序:

protectedvoidbtnConfirm_Click(objectsender,EventArgse){

stringuserName=txtUserName.Text;

stringuserPwd=txtUserPwd.Text;

Response.Redirect("LoginSuccess.aspx?name="+userName+"&pwd="+userPwd);

}步驟3新建名為LoginSuccess.aspx的頁面,并添加如下代碼:

protectedvoidPage_Load(objectsender,EventArgse){

if(Request["name"]!=null&&Request["pwd"]!=null){

Response.Write("<br/>"+Request["name"].ToString()

+",歡迎你進(jìn)入校園在線超市");

Response.Write("<br/>"+"您的登錄密碼為:"

+Request["pwd"].ToString());

}else{

Response.Write("對不起,輸入有誤!");

}

}

步驟4在瀏覽器中查看運(yùn)行結(jié)果,如圖2-13所示。

圖2-13LoginSuccess.aspx頁顯示結(jié)果

任務(wù)描述

在校園在線超市系統(tǒng)中,為會員登錄提供登錄密碼的保存功能。如果會員用戶名和密碼均為“guest”的用戶登錄時,則選中“2周內(nèi)不用再登錄”復(fù)選框,登錄后會保存用戶名和密碼。當(dāng)用戶在有效的時間內(nèi)再次打開登錄窗口時,可以直接登錄。2.3【任務(wù)3】會員登錄狀態(tài)管理

必備知識

知識1狀態(tài)管理

Web應(yīng)用本質(zhì)是無狀態(tài)的,對頁面的每個請求均被視為新請求,且默認(rèn)情況下,來自一個請求的信息對下一個請求不可用,而在實(shí)際企業(yè)應(yīng)用中,完成一個業(yè)務(wù)往往需要經(jīng)過多個步驟。例如,在校園在線超市訂購商品,首先需要找到想要的商品,將它添加到購物車中,然后繼續(xù)瀏覽商品,直到選購?fù)晁猩唐泛?,才提交購物車,完成訂單。既然Web應(yīng)用是無狀態(tài)的,那么它是如何來維護(hù)訂購商品過程中的信息的呢?

ASP.NET提供了在服務(wù)器上保存頁面之間信息的狀態(tài)管理,這有助于在訪問Web站點(diǎn)的過程中,保持用戶信息(狀態(tài))的連續(xù)性。如果能夠在頁面之間保留狀態(tài),那么用戶初始提供的信息就可以重用。因此,每次將頁面發(fā)送回服務(wù)器時,用戶就不需要多次輸入相同的信息了。這就需要通過保存應(yīng)用程序的信息來維護(hù)不同發(fā)送過程中的數(shù)據(jù),稱為應(yīng)用程序的狀態(tài)管理,也稱之為狀態(tài)維護(hù)。

狀態(tài)管理是對同一頁或不同頁的多個請求維護(hù)其狀態(tài)和頁信息的過程。在ASP.NET2.0中提供了多種技術(shù)在服務(wù)器往返過程之間維護(hù)狀態(tài),一般包括服務(wù)器端和客戶端維護(hù)技術(shù)。選擇哪種類型的狀態(tài)管理取決于應(yīng)用程序的性質(zhì)。

1.服務(wù)器端狀態(tài)管理

服務(wù)器端狀態(tài)管理使用服務(wù)器資源來存儲狀態(tài)信息,這類選項(xiàng)的安全性較高。

1)應(yīng)用程序狀態(tài)

應(yīng)用程序狀態(tài)是一種全局存儲機(jī)制,可從Web應(yīng)用程序中的所有頁面訪問。例如,存儲Web應(yīng)用程序的訪問人數(shù)。保存應(yīng)用程序狀態(tài)使用Application對象,如Application["visitors"],這種保存應(yīng)用程序狀態(tài)的變量稱為應(yīng)用程序變量。

2)會話狀態(tài)

會話狀態(tài)信息僅供Web應(yīng)用程序的某個特定會話的用戶使用。例如,存儲某個用戶的訂單編號,存儲登錄用戶的登錄信息等。會話狀態(tài)是HttpSessionState類的實(shí)例,通過Page等類的Session屬性公開,如Session["OrderNumber"]。

3)

Cache對象

在應(yīng)用程序級可使用Cache對象來管理狀態(tài)。

以上服務(wù)器狀態(tài)管理將在后續(xù)章節(jié)中詳細(xì)講解。

2.客戶端狀態(tài)管理

客戶端狀態(tài)管理涉及在頁中或客戶端計(jì)算機(jī)上存儲信息,在各往返行程間不會在服務(wù)器上維護(hù)任何信息??蛻舳藸顟B(tài)管理往往具有最低的安全性,但其具有服務(wù)器性能,因?yàn)閷Ψ?wù)器資源的要求是適度的。它提供可供維護(hù)狀態(tài)的各個選項(xiàng)。

1)

Cookie

Cookie是一個文本文件,用來存儲保留狀態(tài)所需的少量文本信息。

2)

視圖狀態(tài)

視圖狀態(tài)是ASP.NET頁框架默認(rèn)情況下,用于保存往返過程之間的頁和控件值的方法。它通過Page類的ViewState屬性公開。ViewState屬性被作為頁的隱藏域進(jìn)行維護(hù)。

可以使用視圖狀態(tài)存儲特定值,如將“HelloWorld”存儲在視圖狀態(tài)中,代碼如下:

ViewState["view"]="HelloWorld";讀取視圖狀態(tài)的代碼如下:

stringstr=(string)ViewState["view"];

可以通過設(shè)置@Page指令或Page的EnableViewState屬性指示當(dāng)前頁請求結(jié)束時,該頁是否保持其視圖狀態(tài)以及它包含的任何服務(wù)器控件的視圖狀態(tài)。代碼如下:

<%@PageEnableViewState="false"%>

溫馨提示

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

最新文檔

評論

0/150

提交評論