2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩36頁(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、<p>  中文7300字,4800單詞,27000英文字符</p><p>  本科畢業(yè)設(shè)計(jì)(論文)外文翻譯譯文</p><p>  《Learning ASP.NET3.5,2nd Edition》</p><p>  作者:杰西·里伯提,Jesse Liberty, Dan Hurwitz, Brian MacDonald</p>

2、;<p>  出版日期:2008年7月</p><p>  出版單位:奧萊利傳媒出版社</p><p>  起止頁(yè)碼:179-192</p><p>  Author:Jesse Liberty,Dan Hurwitz Brian MacDonald</p><p>  Release Date:July 2008</p&

3、gt;<p>  Publisher:O'Reilly Media</p><p>  start-stop page:179-192</p><p>  《學(xué)習(xí)ASP.NET3.5》</p><p><b>  第五章 驗(yàn)證</b></p><p>  正如你在前面所看到的的章節(jié),許多web應(yīng)

4、用程序涉及到用戶輸入。然而,不幸的是,用戶易犯跳過(guò)所需字段而輸入六位數(shù)的電話號(hào)碼,然后返回各種格式不正確的數(shù)據(jù)到您的應(yīng)用程序。你的數(shù)據(jù)庫(kù)例程會(huì)阻塞損壞的數(shù)據(jù),訂單可能會(huì)丟失。不正確的輸入信用卡號(hào)碼或省略地址可能導(dǎo)致錯(cuò)過(guò)銷售機(jī)會(huì)。好在您可以在編寫代碼檢查用戶的輸入之前就了解你的數(shù)據(jù)庫(kù)代碼,或任何其他危險(xiǎn)。這個(gè)過(guò)程中驗(yàn)證用戶的輸入被稱為驗(yàn)證.</p><p>  傳統(tǒng)上,這需要大量的時(shí)間和精力來(lái)編寫可靠的驗(yàn)證代碼。你

5、需要檢查每個(gè)字段并創(chuàng)建例程來(lái)確保數(shù)據(jù)的完整性。如果發(fā)現(xiàn)問(wèn)題數(shù)據(jù),你需要顯示一個(gè)錯(cuò)誤消息,這樣用戶就可以知道哪里有問(wèn)題并且如何改正。</p><p>  在任何給定的應(yīng)用程序中,你可以選擇驗(yàn)證數(shù)據(jù)格式正確性,或者該值下降的給定范圍,某些字段值。例如,如果您正在處理一個(gè)訂單,您可能需要確保用戶輸入一個(gè)地址和電話號(hào)碼,電話號(hào)碼是已經(jīng)正確的號(hào)碼數(shù)字(沒(méi)有字母),安全號(hào)碼在適當(dāng)形式下集體輸入時(shí)是九位數(shù)由連字符分隔。<

6、/p><p>  有些應(yīng)用程序需要更復(fù)雜的驗(yàn)證,你確認(rèn)一個(gè)領(lǐng)域在一定范圍內(nèi)由兩個(gè)其他領(lǐng)域建立。例如,您可能會(huì)問(wèn)客戶希望什么日期到達(dá)你的酒店,你也可能會(huì)問(wèn)他的離開(kāi)日期。當(dāng)用戶有一個(gè)晚餐預(yù)訂,你會(huì)想要確保用戶選擇到達(dá)和離開(kāi)日期。</p><p>  您需要編寫的驗(yàn)證例程可能對(duì)復(fù)雜性沒(méi)有限制。信用卡已經(jīng)構(gòu)建到他們的校驗(yàn)值和ISBN編號(hào)。Zip和郵政編碼遵循復(fù)雜的模式,例如國(guó)際電話號(hào)碼。你可能需要驗(yàn)證

7、密碼,會(huì)員數(shù)量、金額、日期、跑道選擇,或啟動(dòng)代碼。</p><p>  此外,你通常想要所有這些驗(yàn)證發(fā)生在客戶端,這樣你就可以避免在用戶猶豫他的輸入時(shí)延遲的重復(fù)往返(postbacks)到服務(wù)器。在過(guò)去,這是解決通過(guò)編寫客戶端JavaScript驗(yàn)證輸入,然后編寫服務(wù)器端腳本處理輸入,從瀏覽器不支持客戶端編程。作為一個(gè)安全檢查,即使你在瀏覽器中實(shí)現(xiàn)驗(yàn)證,你可能想做服務(wù)器端驗(yàn)證,因?yàn)橛脩艨梢岳@過(guò)客戶端驗(yàn)證的代碼創(chuàng)建

8、一個(gè)惡意網(wǎng)頁(yè),偽裝成合法頁(yè)面這個(gè)策略稱為欺騙)。通常,這些安全措施涉及寫作你的驗(yàn)證代碼兩次,一次在客戶端,一次在服務(wù)器。</p><p>  正如您可以看到的,在傳統(tǒng)的網(wǎng)絡(luò)編程中,驗(yàn)證需要廣泛的定制編程。ASP.NET框架通過(guò)提供豐富的控件來(lái)驗(yàn)證用戶輸入簡(jiǎn)化了這個(gè)過(guò)程。除了檢查輸入數(shù)據(jù)的有效性,還有驗(yàn)證控件允許您指定如何以及在何處會(huì)報(bào)錯(cuò):是內(nèi)聯(lián)與輸入控制,聚合在一個(gè)總結(jié)報(bào)告,或兩者兼而有之。您可以使用這些控件來(lái)驗(yàn)

9、證輸入HTML和ASP.NET服務(wù)器控件。在這一章,你將學(xué)習(xí)如何使用所有這些驗(yàn)證控件,您將創(chuàng)建大量的頁(yè)面,直至你可以馬上適應(yīng)以及正確使用你的網(wǎng)站。</p><p><b>  驗(yàn)證控件</b></p><p>  當(dāng)你想添加任何其他控制時(shí),你可以添加驗(yàn)證控件到你的ASP.NET文檔中。作為一個(gè)屬性驗(yàn)證控制器,你可以指定其他控制驗(yàn)證。也可以自由組合各種驗(yàn)證控件,甚至可以

10、編寫自己的自定義驗(yàn)證控件,您將在本章后面的內(nèi)容中看到。</p><p>  當(dāng)前支持DHTML,.NET驗(yàn)證的瀏覽器是應(yīng)用在客戶端完成方面,避免了返回到服務(wù)器的必要。(這個(gè)客戶端驗(yàn)證使用JavaScript但不屬于AJAX庫(kù))如果是老的瀏覽器,你的代碼是不會(huì)改變的,但是需要在服務(wù)器端驗(yàn)證發(fā)送到客戶的代碼。</p><p>  每當(dāng)頁(yè)面試圖返回服務(wù)器時(shí)就要驗(yàn)證。即使有時(shí)你并不想要任何驗(yàn)證發(fā)生

11、,例如點(diǎn)擊取消按鈕這種情況。為了防止在這些情況下驗(yàn)證,許多回傳控制這樣的按鈕,如按鈕,圖像按鈕,鏈接按鈕,列表控件,文本框有一個(gè)原因驗(yàn)證屬性,你可以設(shè)置來(lái)決定當(dāng)頁(yè)面上控件的默認(rèn)事件引發(fā)時(shí)是否執(zhí)行驗(yàn)證。</p><p>  如果原因驗(yàn)證設(shè)置為true,如果控制頁(yè)面上的驗(yàn)證失敗則返回的默認(rèn)值是不會(huì)發(fā)生。這是一個(gè)很棘手的問(wèn)題,因?yàn)檫@意味著頁(yè)面將不會(huì)發(fā)布到服務(wù)器,除非所有的頁(yè)面上的控制是在有效狀態(tài)。如果原因驗(yàn)證設(shè)置為fa

12、lse,那么,當(dāng)按鈕是用來(lái)發(fā)布頁(yè)面時(shí)沒(méi)有驗(yàn)證發(fā)生在。</p><p>  有時(shí)你需要允許繼續(xù)回傳,即使一些控制頁(yè)面是無(wú)效的。例如,假設(shè)您有一個(gè)頁(yè)面,該頁(yè)面收集兩個(gè)地址和稅務(wù)信息。該頁(yè)面上的一個(gè)按鈕處理地址字段可能之前用戶已經(jīng)進(jìn)入一些不相關(guān)的稅務(wù)信息。然而,如果需要的一個(gè)稅收字段缺失,頁(yè)面不會(huì)發(fā)布。</p><p>  通過(guò)使用驗(yàn)證組屬性你可以解決這個(gè)問(wèn)題。你可以組一個(gè)導(dǎo)致返回的群驗(yàn)證控件一

13、起控制,僅僅群成員中的驗(yàn)證控件將被應(yīng)用。在這個(gè)示例中,在允許地址按鈕發(fā)布之前您可以要求所有的地址控制是有效的,但允許后即使一些稅收字段無(wú)效的。</p><p>  ASP.NET包含了以下驗(yàn)證控件:</p><p><b>  必填驗(yàn)證控件</b></p><p>  確保用戶不離開(kāi)字段空白和跳過(guò)你的輸入控制。一個(gè)必填驗(yàn)證控件可以綁定到一個(gè)文本

14、框,這意味著頁(yè)面只會(huì)通過(guò)驗(yàn)證用戶輸入到文本框的東西。在選擇控件時(shí),比如下拉或單選按鈕,必填驗(yàn)證控件確保用戶作出選擇而不是默認(rèn)您指定的值。這個(gè)必填驗(yàn)證控件不檢查數(shù)據(jù)的有效性;它只確保被輸入或選擇的數(shù)據(jù)。</p><p><b>  范圍驗(yàn)證控件</b></p><p>  確保輸入的值是在一個(gè)指定的上下邊界。您可以指定范圍是在一對(duì)數(shù)字(比如大于10和小于100),一對(duì)字

15、符(大于D和不到K),或一對(duì)的日期(1/1/08之后,2/28/08之前)。</p><p><b>  比較驗(yàn)證控件</b></p><p>  比較了對(duì)另一個(gè)用戶輸入的值,它可以比較你在設(shè)計(jì)時(shí)指定的一個(gè)值,或?qū)傩灾颠M(jìn)行另一個(gè)控制,也可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行比較。</p><p><b>  常規(guī)驗(yàn)證控件</b></p&

16、gt;<p>  其中一個(gè)最強(qiáng)大的驗(yàn)證器,是比較了用戶的輸入,使用正規(guī)表達(dá)提供給你。正規(guī)表達(dá)式是一種強(qiáng)有力的用來(lái)匹配一個(gè)模式的字母、數(shù)字或符號(hào)的好方法,您將在之后的章節(jié)看到。你可以使用這個(gè)驗(yàn)證器檢查有效的集體安全號(hào)碼、電話號(hào)碼、密碼強(qiáng)度,等等。</p><p><b>  自定義驗(yàn)證控件</b></p><p>  如果這些控制都沒(méi)有滿足您的需要,您可以

17、創(chuàng)建您自己使用的自定義驗(yàn)證控件。這個(gè)檢查用戶輸入的反對(duì)任何算法而提供一個(gè)自定義的算法。</p><p>  在本章的其余部分,我們將介紹如何在ASP.NET應(yīng)用中使用每種控件驗(yàn)證數(shù)據(jù)。</p><p><b>  必填驗(yàn)證控件</b></p><p>  必需的字段驗(yàn)證器可以確保用戶你的控制提供了一個(gè)值為,使得在有下拉列表的情況下,用戶選擇除了

18、默認(rèn)值還可以其他選擇。</p><p>  首先,創(chuàng)建一個(gè)新的叫必填驗(yàn)證控件的網(wǎng)站。在本節(jié)中,你要?jiǎng)?chuàng)建如在設(shè)計(jì)視圖中圖5-1顯示的發(fā)貨選擇web頁(yè)面。正如你在任意數(shù)量的web站點(diǎn)所看到的,這是一個(gè)非常標(biāo)準(zhǔn)的運(yùn)輸形式。你可以想象試圖把這樣一個(gè)頁(yè)面嵌入到您自己的網(wǎng)站。</p><p>  雖然ASP.NET驗(yàn)證控件做大部分客戶端使用JavaScript的工作,但他們不使用或依賴于AJAX,包括

19、腳本管理器的控制,所以你不需要將其用于此頁(yè)面。</p><p>  圖5-1 發(fā)貨選擇頁(yè)面包含必填驗(yàn)證控件控制用以保證用戶在每個(gè)字段的選擇當(dāng)用戶單擊登錄按鈕時(shí),頁(yè)面驗(yàn)證以確保每個(gè)字段已經(jīng)被修改。如果不是,則出錯(cuò)的字段用紅色標(biāo)記為錯(cuò)誤消息如圖5-2</p><p>  您將使用一個(gè)五行三列的HTML表來(lái)創(chuàng)建頁(yè)面布局,進(jìn)入必要的控制。用從以前的章節(jié)學(xué)過(guò)的東西,你可以直接在源視圖,或利用表向?qū)?/p>

20、很容易地創(chuàng)建表,所以我們就在這里講了。添加控件形式也非常容易。</p><p>  第一列包含一些描述性的標(biāo)題為輸入字段的表,與中間列包含控制來(lái)進(jìn)行驗(yàn)證(下拉列表,單選按鈕列表,和文本框)。第三列將包含驗(yàn)證控件和一些錯(cuò)誤消息的顯示。</p><p>  表的第一行應(yīng)該是一個(gè)合并了三列的單元(使用HTML和并列的屬性),它包含一個(gè)顯示任何信息的標(biāo)簽。設(shè)置ID的標(biāo)簽和設(shè)置文本屬性為一個(gè)空字符串

21、(Text="")。</p><p>  圖5-2 這個(gè)頁(yè)面的用戶在點(diǎn)擊提交時(shí)沒(méi)有提供任何發(fā)貨信息,所以必填驗(yàn)證控件返回錯(cuò)誤,你可以在右邊看到</p><p>  第一行輸入控件在中間列命名ddl托運(yùn)人的用戶有一個(gè)下拉列表,使用列表項(xiàng)集合編輯器為發(fā)貨人設(shè)置值。</p><p><b>  列表如下:</b></p&g

22、t;<p>  ——請(qǐng)選擇一個(gè)發(fā)貨人,</p><p><b>  美國(guó)郵政</b></p><p><b>  隔夜快遞</b></p><p><b>  聯(lián)合航運(yùn)服務(wù)</b></p><p><b>  萬(wàn)海航運(yùn)</b></p&g

23、t;<p><b>  小馬快遞</b></p><p><b>  星際飛船運(yùn)輸車</b></p><p>  你很快就會(huì)看到第一項(xiàng)是特別重要的。</p><p>  你想要每個(gè)字段驗(yàn)證,添加一個(gè)必填驗(yàn)證控件控制。打開(kāi)驗(yàn)證部分的工具箱,并拖動(dòng)三個(gè)必填驗(yàn)證控件控制表,進(jìn)入第三單元的每個(gè)三中間行,如圖5-1所示

24、。</p><p>  這個(gè)必填驗(yàn)證控件控制有自己的ID,它還要求你想驗(yàn)證的ID控件。因此,設(shè)置第一必填驗(yàn)證控件的ID添加到rfv發(fā)貨人,并為ddl發(fā)貨人設(shè)置控制驗(yàn)證屬性(驗(yàn)證的下拉列表)。目前,你不需要?jiǎng)h除文本的錯(cuò)誤性能。如果用戶不做出選擇,你將需要給用戶顯示一些文本,因此包括在開(kāi)始和結(jié)束之間的控制標(biāo)記文本“請(qǐng)選擇一個(gè)發(fā)貨人”。你也可以設(shè)置此文本使用文本屬性。</p><p>  必填驗(yàn)

25、證控件有一個(gè)額外的屬性初值,在這種情況下,你應(yīng)該為下拉框中被驗(yàn)證的控制設(shè)置初始值。如果用戶單擊提交,這個(gè)初始值將被拿來(lái)與下拉的默認(rèn)值比較,如果他們是相同的,將會(huì)顯示錯(cuò)誤消息。這迫使用戶改變初始值。在本例中,第一項(xiàng)的下拉是一些文本要求用戶做出的選擇。這不是一個(gè)有效的選擇,所以你需要通過(guò)向文本提示一樣設(shè)置初始值來(lái)確保用戶是否選擇別的東西。如果你有一個(gè)默認(rèn)的發(fā)貨人,不想用初值,這僅僅是防止用戶從默認(rèn)值選擇。所有這一切都在源視圖中顯示為以下代碼

26、片段:</p><p>  asp:RequiredFieldValidator ID="rfvShipper" runat="server"</p><p>  ControlToValidate="ddlShipper"</p><p>  InitialValue="--Please Sel

27、ect a Shipper--"></p><p>  Please Select a Shipper</p><p>  </asp:RequiredFieldValidator></p><p>  確保顯示屬性設(shè)置為靜態(tài)(默認(rèn)),它告訴ASP.NET來(lái)分配頁(yè)面上驗(yàn)證器是否有消息顯示。如果你設(shè)置為動(dòng)態(tài)、空間不會(huì)被分配到就顯示錯(cuò)誤消息。

28、動(dòng)態(tài)分配是很強(qiáng)大的,但是它可以給你的控件在頁(yè)面上來(lái)回反彈顯示的消息。我們將立刻向你展示。</p><p>  在第二個(gè)輸入行,添加一個(gè)單選按鈕列表稱為實(shí)時(shí)阻止列表緊急,正如先前圖5-1所示。給第二個(gè)必需字段驗(yàn)證器的ID Rfv緊迫感,并設(shè)置其屬性來(lái)控制驗(yàn)證這項(xiàng)緊迫,確保一個(gè)在實(shí)時(shí)阻止列表的單選按鈕被選中緊迫性。同時(shí),改變文本屬性為“請(qǐng)選擇一個(gè)緊迫感”:</p><p>  這次你不需要顯示

29、一個(gè)初始值。因?yàn)榭刂剖且粋€(gè)單選按鈕列表,驗(yàn)證器知道用戶需要選擇一個(gè)按鈕;如果任何按鈕被選中,驗(yàn)證都是合適的。</p><p>  最后,完成這個(gè)例子中,在第三排添加一個(gè)多行文本框和一個(gè)ID的txt指令。使用被命名為rfv指令的第三必填驗(yàn)證控件要求用戶輸入一些文本。驗(yàn)證器很簡(jiǎn)單;設(shè)置文本框作為控制驗(yàn)證,并輸入錯(cuò)誤信息“請(qǐng)?zhí)峁┨厥庵噶睢钡轿谋緦傩浴?lt;/p><p>  在一個(gè)真正的網(wǎng)站,特別指

30、令字段可能是可選的,但對(duì)于這個(gè)示例我們要求它可選。</p><p>  最后一行,在中間列放置被稱之為提交按鈕,并設(shè)置其文本為“提交”。在后臺(tái)代碼文件中唯一的代碼需要是事件處理程序的提交按鈕。在設(shè)計(jì)視圖雙擊按鈕,你會(huì)像往常一樣送往點(diǎn)擊事件處理程序。突出顯示的代碼示例輸入5-1。</p><p>  例5-1。必填驗(yàn)證控件的單擊按鈕事件處理程序檢查驗(yàn)證每一個(gè)頁(yè)面上的控制</p>

31、<p>  Protected Sub btnSubmit_Click(ByVal sender As Object,_</p><p>  ByVal e As System.EventArgs)_</p><p>  Handles btnSubmit.Click</p><p>  If Page.IsValid Then</p>&

32、lt;p>  lblMsg.Text = "Page is valid!"</p><p><b>  Else</b></p><p>  ' this code never reached</p><p>  lblMsg.Text = "Some of the required fields a

33、re empty."</p><p><b>  End If</b></p><p><b>  End Sub </b></p><p>  當(dāng)單擊提交按鈕時(shí)驗(yàn)證每個(gè)控制檢查,如果每個(gè)控制是有效的,則可用的頁(yè)面屬性將返回true。</p><p>  現(xiàn)在,返回和設(shè)置顯示驗(yàn)證控件的動(dòng)態(tài)

34、屬性。當(dāng)運(yùn)行應(yīng)用程序時(shí)看看會(huì)發(fā)生什么。沒(méi)有空間分配給驗(yàn)證控制,瀏覽器將會(huì)考慮你的表只有兩列寬而不是三個(gè)。表不分配任何空間驗(yàn)證信息,并且將只承認(rèn)一個(gè)欄的提示和其他的控件。當(dāng)你驗(yàn)證控件(通過(guò)點(diǎn)擊提交按鈕)此表將會(huì)擴(kuò)大,這既可能令人不安也可能很吸引人,取決于你如何設(shè)計(jì)頁(yè)面的布局。在本例中,您可以看到控制跳來(lái)跳去,當(dāng)你點(diǎn)擊提交,結(jié)果可能不是你想要的,所以要回去改變控件以返回靜態(tài)。</p><p>  再回頭看看例5-1。

35、注意到評(píng)論說(shuō),將永遠(yuǎn)不可能執(zhí)行else子句。回想一下,驗(yàn)證發(fā)生在客戶端。如果頁(yè)面是無(wú)效的,則從來(lái)沒(méi)有發(fā)布到服務(wù)器和服務(wù)器端代碼不運(yùn)行(當(dāng)然,除非你設(shè)置原因驗(yàn)證屬性為false,正如本章開(kāi)頭提到)。</p><p>  你可以讓你的頁(yè)面對(duì)用戶更友好一點(diǎn)通過(guò)將焦點(diǎn)放到第一個(gè)控制驗(yàn)證失敗。為此,為每個(gè)驗(yàn)證控制添加設(shè)置焦點(diǎn)錯(cuò)誤屬性為true(缺省值是false):</p><p>  <as

36、p:RequiredFieldValidator runat=server</p><p>  id="rfvInstructions"</p><p>  ControlToValidate="txtInstructions"</p><p>  Display="Static"</p>&

37、lt;p>  SetFocusOnError="true"</p><p>  Width="100%"></p><p>  Please provide special instructions</p><p>  </asp:RequiredFieldValidator></p>&

38、lt;p>  再次運(yùn)行應(yīng)用程序,然后單擊提交按鈕不用添加特殊的指令。驗(yàn)證后,你不但要提供給它們的消息,而且重點(diǎn)是注意在這個(gè)文本框控件中輸入文本。如果你不止在一個(gè)控制器設(shè)置焦點(diǎn)錯(cuò)誤,亦或者頁(yè)面無(wú)效,焦點(diǎn)將被設(shè)置為第一控制,驗(yàn)證失敗,這個(gè)屬性設(shè)置為true。</p><p>  完整的源代碼標(biāo)記文件,default.aspx,對(duì)于本例中列出的例子5:2</p><p>  Example

39、5-2. Default.aspx forRequiredFieldValidator</p><p>  <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"</p><p>  Inherits="_Default&q

40、uot;%></p><p>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</p><p>  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></p><p&g

41、t;  <html xmlns="http://www.w3.org/1999/xhtml"></p><p>  Example5-2. Default.aspx forRequiredFieldValidator (continued)</p><p>  The RequiredFieldValidator | 187</p><p

42、>  <head runat="server"></p><p>  <title>Required Field Validation</title></p><p><b>  </head></b></p><p><b>  <body><

43、;/b></p><p>  <form id="form1" runat="server"></p><p><b>  <div></b></p><p><b>  <table></b></p><p><

44、;b>  <tr></b></p><p>  <td colspan="3"></p><p>  <asp:Label ID="lblMsg" runat="server" Text="" /></p><p><b>

45、  </td></b></p><p><b>  </tr></b></p><p><b>  <tr></b></p><p>  <td align="right" valign="top">Shipper:<

46、/td></p><p><b>  <td></b></p><p>  <asp:DropDownList ID="ddlShipper" runat="server"></p><p>  <asp:ListItem>-- Please Select a S

47、hipper--</asp:ListItem></p><p>  <asp:ListItem>US Postal Service</asp:ListItem></p><p>  <asp:ListItem>Overnight Express</asp:ListItem></p><p>  <as

48、p:ListItem>United Shipping Service</asp:ListItem></p><p>  <asp:ListItem>WHL</asp:ListItem></p><p>  <asp:ListItem>Pony Express</asp:ListItem></p><p&g

49、t;  <asp:ListItem>Starship Transporter</asp:ListItem></p><p>  </asp:DropDownList></p><p><b>  </td></b></p><p><b>  <td></b>&l

50、t;/p><p>  <asp:RequiredFieldValidator ID="rfvShipper" runat="server"</p><p>  ControlToValidate="ddlShipper"</p><p>  InitialValue="--Please Sele

51、ct a Shipper--"</p><p>  SetFocusOnError="true"></p><p>  Please Select a Shipper</p><p>  </asp:RequiredFieldValidator></p><p><b>  </

52、td></b></p><p><b>  </tr></b></p><p><b>  <tr></b></p><p>  <td align="right" valign="top">Urgency:</td>

53、</p><p><b>  <td></b></p><p>  <asp:RadioButtonList ID="rblUrgency" runat="server"></p><p>  <asp:ListItem>Today</asp:ListItem&g

54、t;</p><p>  <asp:ListItem>2nd Day</asp:ListItem></p><p>  <asp:ListItem>Normal</asp:ListItem></p><p>  <asp:ListItem>Yesterday</asp:ListItem><

55、/p><p>  </asp:RadioButtonList></p><p><b>  </td></b></p><p><b>  <td></b></p><p>  <asp:RequiredFieldValidator ID="rfvUr

56、gency" runat="server"</p><p>  ControlToValidate="rblUrgency"</p><p>  Display="Static"</p><p>  SetFocusOnError="true"></p>&

57、lt;p>  Please select an Urgency</p><p>  </asp:RequiredFieldValidator></p><p><b>  </td></b></p><p>  Example5-2. Default.aspx forRequiredFieldValidator (

58、continued)</p><p><b>  </tr></b></p><p><b>  <tr></b></p><p>  <td align="right" valign="top">Instructions</td>&l

59、t;/p><p><b>  <td></b></p><p>  <asp:TextBox ID="txtInstructions" runat="server"</p><p>  Rows="3" TextMode="MultiLine">

60、</asp:TextBox></p><p><b>  </td></b></p><p><b>  <td></b></p><p>  <asp:RequiredFieldValidator ID="rfvInstructions" runat=&quo

61、t;server"</p><p>  ControlToValidate="txtInstructions"</p><p>  Display="Static"</p><p>  SetFocusOnError="true"></p><p>  Please

62、provide special instructions</p><p>  </asp:RequiredFieldValidator></p><p><b>  </td></b></p><p><b>  </tr></b></p><p><b&g

63、t;  <tr></b></p><p><b>  <td></td></b></p><p><b>  <td></b></p><p>  <asp:Button ID="btnSubmit" runat="server

64、" Text="Submit" /></p><p><b>  </td></b></p><p><b>  <td></td></b></p><p><b>  </tr></b></p><

65、;p><b>  </table></b></p><p><b>  </div></b></p><p><b>  </form></b></p><p><b>  </body></b></p><

66、;p><b>  </html></b></p><p><b>  驗(yàn)證信息概要控件</b></p><p>  正如你在前面示例中看到的,把驗(yàn)證反饋到每個(gè)控件是有用的,但它可能會(huì)導(dǎo)致一些布局問(wèn)題。幸運(yùn)的是,ASP.NET可以讓你決定你想要怎樣的驗(yàn)證錯(cuò)誤報(bào)告。例如,不是把錯(cuò)誤信息伴隨控制,你可以隨著驗(yàn)證總結(jié)控制總結(jié)所有的驗(yàn)證失

67、敗。這種控制可以將錯(cuò)誤總結(jié)在一個(gè)無(wú)序列表,一個(gè)簡(jiǎn)單的列表,或一個(gè)出現(xiàn)web頁(yè)面或彈出消息框段落的其他地方。</p><p>  為了了解它是如何工作的,創(chuàng)建一個(gè)叫必填驗(yàn)證控件摘要的必填驗(yàn)證控件副本web應(yīng)用程序。切換到源視圖。從驗(yàn)證部分的工具箱,拖動(dòng)驗(yàn)證摘要控制到井底頁(yè)面,</table>標(biāo)記后。</p><p>  復(fù)制一個(gè)網(wǎng)站的步驟來(lái)介紹一個(gè)新網(wǎng)站,如附錄B所示。</

68、p><p>  設(shè)置驗(yàn)證摘要控制屬性的值突出在以下代碼片段(當(dāng)然也可以在屬性窗口):</p><p>  <asp:ValidationSummary ID="vsSummary" runat="server"</p><p>  DisplayMode="BulletList"</p>&

69、lt;p>  HeaderText="The following error(s) were found:"</p><p>  ShowSummary="true" /></p><p>  做這個(gè)工作,你需要向其他驗(yàn)證控制添加一個(gè)錯(cuò)誤信息屬性。例如,修改第一驗(yàn)證控制發(fā)貨人下拉</p><p><b>

70、  菜單如下:</b></p><p>  <asp:RequiredFieldValidator ID="rfvShipper" runat="server"</p><p>  ControlToValidate="ddlShipper"</p><p>  Display="

71、;Static"</p><p>  InitialValue="--Please Select a Shipper--"</p><p>  ErrorMessage="You did not select a shipper from the drop-down."</p><p>  SetFocusOnErr

72、or="true">*</p><p>  </asp:RequiredFieldValidator></p><p>  注意,,本次是在星號(hào)(*)后而不是在文本屬性中為驗(yàn)證器添加開(kāi)始標(biāo)記,。如果這個(gè)控制報(bào)告驗(yàn)證錯(cuò)誤,在錯(cuò)誤信息屬性中的文本將被顯示在摘要。你已經(jīng)修改驗(yàn)證器顯示星號(hào)而不是更完整的錯(cuò)誤消息。現(xiàn)在</p><p> 

73、 你有一個(gè)摘要,只需要標(biāo)記錯(cuò)誤而不需要通過(guò)控制顯示一個(gè)完整的錯(cuò)誤消息。目前,類似的變化對(duì)于其他每個(gè)必填驗(yàn)證控件同樣適用(您可以使用錯(cuò)誤文本顯示在圖5-3,或隨時(shí)即興發(fā)揮)。</p><p>  運(yùn)行應(yīng)用程序,并單擊提交按鈕并且不做出任何選擇,這樣就沒(méi)有驗(yàn)證控件過(guò)關(guān)。結(jié)果顯示在圖5-3。</p><p>  圖5-3中,把提出的驗(yàn)證錯(cuò)誤摘要作為一個(gè)無(wú)序列表。雖然我們已經(jīng)把它明確,但這是默認(rèn)的

74、顯示模式。消息通過(guò)分別設(shè)置顯示模式屬性的驗(yàn)證總結(jié)子彈列表,列表,或單獨(dú)的段落,也可以顯示為一個(gè)簡(jiǎn)單的列表或一個(gè)段落。</p><p><b>  比較驗(yàn)證器</b></p><p>  雖然能夠確保用戶做出某種類型的條目是偉大的,但是你會(huì)經(jīng)常想在一定的準(zhǔn)則下驗(yàn)證條目?jī)?nèi)容。一個(gè)常見(jiàn)的要求是比較用戶的輸入到一個(gè)恒定值,這個(gè)值的另一個(gè)控制,或數(shù)據(jù)庫(kù)值。</p>

75、<p>  看到這個(gè)工作時(shí),使一個(gè)新的必填驗(yàn)證控件摘要網(wǎng)站的副本并命名為比較驗(yàn)證器的網(wǎng)站。在這個(gè)例子中,您將添加一個(gè)新的控制詢問(wèn)用戶她期望獲得一個(gè)多少包的裝運(yùn)。</p><p>  圖5-3 當(dāng)你使用一個(gè)驗(yàn)證摘要時(shí)控制無(wú)法通過(guò)驗(yàn)證。很明顯,但更重要的是,頁(yè)面上會(huì)出現(xiàn)總結(jié)告訴用戶到底怎么了</p><p>  這樣做,首先你需要在行包含提交按鈕之前添加一個(gè)新的表行。也可以在源設(shè)

76、計(jì)視圖中這樣做,雖然后者使它很簡(jiǎn)便。</p><p>  點(diǎn)擊任何地方的行包含提交按鈕。然后,單擊右鍵,彈出菜單,得到選擇一個(gè)插入,然后在當(dāng)前行上面插入一個(gè)新表,如圖5-4。</p><p>  在選定行之上插入一個(gè)空白的HTML表行。新的一行,在正確的表格插入一些標(biāo)題文本,一個(gè)文本框(稱之為txtNum包),一個(gè)必需的字段驗(yàn)證器,和一個(gè)比較驗(yàn)證器。你可能想調(diào)整布局切換到源視圖與<b

77、r/>控件之間的兩個(gè)驗(yàn)證。調(diào)整兩個(gè)新確認(rèn)器的屬性,見(jiàn)例5-3。</p><p>  圖5-4 當(dāng)你選擇一個(gè)表行并單擊右鍵,彈出菜單讓你選擇在你想要的單元插入一個(gè)新行</p><p>  例5-3。這個(gè)比較控制器比較控制一組值</p><p><b>  <tr></b></p><p>  <t

78、d>Number of packages</td></p><p><b>  <td></b></p><p>  <asp:TextBox ID="txtNumPackages" runat="server"></asp:TextBox></p><p

79、><b>  </td></b></p><p><b>  <td></b></p><p>  <asp:RequiredFieldValidator ID="rfvNumPackages" runat="server"</p><p>  C

80、ontrolToValidate="txtNumPackages"</p><p>  ErrorMessage="You did not enter the number of packages."</p><p>  SetFocusOnError="True">*</p><p>  </

81、asp:RequiredFieldValidator></p><p><b>  <br/></b></p><p>  <asp:CompareValidator ID="cvNumPackages" runat="server"</p><p>  ControlToVali

82、date="txtNumPackages"</p><p>  ErrorMessage="Invalid number of packages"</p><p>  Operator="GreaterThan" SetFocusOnError="True"</p><p>  Type

83、="Integer" ValueToCompare="0">*</p><p>  </asp:CompareValidator></p><p><b>  </td></b></p><p><b>  </tr></b></p&g

84、t;<p>  表5-5現(xiàn)在看起來(lái)好像設(shè)計(jì)視圖和兩個(gè)驗(yàn)證控件在過(guò)去的單元環(huán)繞</p><p>  圖5-5 在設(shè)計(jì)視圖中一個(gè)新的帶有文本框的表行對(duì)必填驗(yàn)證控件和比較驗(yàn)證控件進(jìn)行驗(yàn)證</p><p>  再次運(yùn)行應(yīng)用程序,并嘗試進(jìn)入各種域值。你會(huì)看到,如果你輸入0,或者一個(gè)負(fù)數(shù),驗(yàn)證失敗。如果你輸入一個(gè)正數(shù),控制通過(guò)了驗(yàn)證。如果你把它空白,你會(huì)發(fā)現(xiàn)它仍然失敗。沒(méi)有必填驗(yàn)證控件

85、,不過(guò)也沒(méi)有通過(guò)。</p><p>  兩個(gè)驗(yàn)證器放置到相同的單元表格,同時(shí)驗(yàn)證相同的控制:txtNum包,需要必填驗(yàn)證控件,因?yàn)楸容^驗(yàn)證器無(wú)效的時(shí)候始終返回true或空值,聽(tīng)起來(lái)較直觀。</p><p>  在這種情況下,比較驗(yàn)證器的指定常數(shù)的屬性獲取一個(gè)常數(shù)零。運(yùn)算屬性決定了將如何比較(即如何輸入值必須與指定的常數(shù)有關(guān))。</p><p>  操作符屬性的可能值

86、是相等,不相等,大于,大于等于,少于,不等于和數(shù)據(jù)類型檢查。在這個(gè)示例中,要想有效,輸入值必須比較恒定大于這個(gè)值。用戶必須發(fā)送超過(guò)零包,或者放入更多的相關(guān)條款。</p><p>  你必須使用類型屬性讓控制知道使用哪種類型的值。類型屬性接受一個(gè)驗(yàn)證數(shù)據(jù)類型的枚舉值:貨幣,日期、對(duì)(一對(duì)是VB中對(duì)于一個(gè)非整數(shù)來(lái)說(shuō)的,即一個(gè)十進(jìn)制數(shù)),整數(shù)或字符串。在這個(gè)例子中,這個(gè)值為整數(shù),因此相比,進(jìn)入(例如)字符可能會(huì)導(dǎo)致驗(yàn)證

87、失敗。</p><p><b>  檢查輸入類型</b></p><p>  需要檢查的包數(shù)量可能大于零,這個(gè)數(shù)量是一個(gè)數(shù)字(而不是一個(gè)字母或日期)。要做到這一點(diǎn),你要對(duì)比較控制器做一個(gè)小的改變。</p><p>  刪除比較值的屬性和運(yùn)算符屬性大于數(shù)據(jù)類型檢查。因?yàn)轭愋蛯傩詾檎麛?shù),該控件將報(bào)告任何整數(shù)值作為有效值。使用下面的代碼來(lái)替換,為您在

88、最后一節(jié)中添加驗(yàn)證比較器:</p><p>  <asp:CompareValidator ID="cvNumPackages" runat="server"</p><p>  ControlToValidate="txtNumPackages"</p><p>  ErrorMessage=&qu

89、ot;Invalid number of packages"</p><p>  Operator="DataTypeCheck" SetFocusOnError="True"</p><p>  Type="Integer">*</p><p>  </asp:CompareVali

90、dator></p><p>  現(xiàn)在,再次運(yùn)行該應(yīng)用程序,并嘗試在文本框中輸入的隨機(jī)數(shù)據(jù)。你會(huì)發(fā)現(xiàn)數(shù)字,為零或甚至為負(fù)數(shù),通過(guò)驗(yàn)證,還會(huì)出現(xiàn)別的失敗。你可以想象這種驗(yàn)證將對(duì)訂單號(hào)碼,信用卡號(hào)碼,或任何其他數(shù)據(jù)類型地方比較重要的地方是非常有益的。</p><p><b>  對(duì)比另一個(gè)控制</b></p><p>  你可以將一個(gè)控件與另

91、一個(gè)控件中的值而不是常數(shù)相比較。經(jīng)典的使用表現(xiàn)在可能要求用戶兩次輸入自己的密碼,然后驗(yàn)證這兩項(xiàng)是否都相同。</p><p>  常見(jiàn)的情況是你要求用戶輸入一個(gè)新密碼。為了安全,在輸入密碼時(shí),文本用星號(hào)偽裝。因?yàn)檫@將是用戶需要登錄的密碼,您必須驗(yàn)證用戶輸入密碼的如預(yù)期并沒(méi)有錯(cuò)誤。典型的解決方案是要求用戶第二次輸入密碼,然后檢查每次輸入的密碼是否相同。對(duì)于這種情況比較驗(yàn)證器是非常適合的。</p><

92、;p>  為了證明這一點(diǎn),你需要在頁(yè)面上添加兩個(gè)表行,每個(gè)都可以作為密碼字段的文本框使用。這些密碼字段的第一個(gè)具有所需字段驗(yàn)證器控件 ;第二個(gè)會(huì)有一個(gè)所需字段驗(yàn)證器和比較驗(yàn)證器。同樣也可以在設(shè)計(jì)視圖中或直接在源視圖中,添加這些行和控件。無(wú)論哪種方式,標(biāo)記看起來(lái)示例5-4中列出的類似。一定要設(shè)置正確的控件來(lái)驗(yàn)證所有這些新的驗(yàn)證控件的屬性,以及其他屬性。</p><p>  例5-4。你可以執(zhí)行密碼驗(yàn)證使用比較

93、控制器控制比較兩個(gè)控制</p><p>  <!-- Text fields for passwords --></p><p><b>  <tr></b></p><p>  <td>Enter your password:</td></p><p><b>

94、  <td></b></p><p>  <asp:TextBox ID="txtPassword1" runat="server"</p><p>  TextMode="Password" Width="80"></asp:TextBox></p>

95、<p><b>  </td></b></p><p><b>  <td></b></p><p>  <asp:RequiredFieldValidator ID="rfvTxtPassword1" runat="server"</p><

96、p>  ControlToValidate="txtPassword1"</p><p>  ErrorMessage="Please enter your password."</p><p>  SetFocusOnError="True">*</p><p>  </asp:Requ

97、iredFieldValidator></p><p><b>  </td></b></p><p><b>  </tr></b></p><p>  <!-- Second password for comparison --></p><p><

98、;b>  <tr></b></p><p>  <td>Re-Enter your password:</td></p><p><b>  <td></b></p><p>  <asp:TextBox ID="txtPassword2" runat=

99、"server"</p><p>  TextMode="Password" Width="80"></asp:TextBox></p><p><b>  </td></b></p><p><b>  <td></b>

100、</p><p>  <asp:RequiredFieldValidator ID="rfvTxtPassword2" runat="server"</p><p>  ControlToValidate="txtPassword2"</p><p>  ErrorMessage="Plea

101、se re-enter your password."</p><p>  SetFocusOnError="True">*</p><p>  </asp:RequiredFieldValidator></p><p><b>  <br /></b></p><

102、p>  <!-- Second password must match the first --></p><p>  <asp:CompareValidator ID="cvPasswords" runat="server"</p><p>  ControlToValidate="txtPassword2&quo

103、t;</p><p>  ControlToCompare="txtPassword1"</p><p>  SetFocusOnError="true"</p><p>  Type="String"</p><p>  Operator="Equal"<

104、/p><p>  ErrorMessage="Passwords do not match">*</p><p>  </asp:CompareValidator></p><p><b>  </td></b></p><p><b>  </tr>&

105、lt;/b></p><p>  繼續(xù)測(cè)試,如果您輸入的字符串不匹配,控制系統(tǒng)將無(wú)法通過(guò)驗(yàn)證。</p><p>  第一個(gè)新的表行里包含將其文本模式屬性設(shè)置為密碼文本框控件。它也包含了所需的字段驗(yàn)證,以確保用戶不離開(kāi)使字段空白。</p><p>  第二行包含第二密碼文本框和第二個(gè)必要的字段驗(yàn)證(此外,用戶可以不離開(kāi)空白領(lǐng)域),但是它使用了一個(gè)比較驗(yàn)證器檢查相

106、關(guān)的文本框的值(密碼文本框2)和第一個(gè)文本框(密碼文本框1),以驗(yàn)證它們都具有相同的內(nèi)容。操作屬性設(shè)置為相等,且類型屬性設(shè)置為字符串,所以這兩個(gè)字符串必須匹配。請(qǐng)注意設(shè)置這兩個(gè)屬性:</p><p>  ControlToValidate="txtPassword2"</p><p>  ControlToCompare="txtPassword1"

107、</p><p>  這兩個(gè)文本框必須有一個(gè)必填字段驗(yàn)證器。如果比較驗(yàn)證器反對(duì)為null或空字符串值,它將通過(guò)驗(yàn)證。</p><p>  《Learning ASP.NET3.5, 2nd Edition》</p><p>  CHAPTER 5 Validation</p><p>  As you have seen in the p

108、receding chapters, many web applications involve user input. The sad fact is, however, that users make mistakes: they skip required fields, they put in six-digit phone numbers, and they return all manner of incorrectly f

109、ormatted data to your application. Your database routines can choke on corrupted data, and orders can be lost. An incorrectly entered credit card number or omitted address may result in a missed sales opportunity. Fortun

110、ately, you can write code that chec</p><p>  Traditionally, it takes a great deal of time and effort to write reliable validation code. You need to check each field and create routines for ensuring data inte

111、grity. If bad data is found, you need to display an error message so the user knows there is a problem and how to correct it.</p><p>  In any given application, you may choose to verify that the data is form

112、atted correctly, or that the values fall within a given range, or that certain fields have a value at all. For example, if you’re processing an order, you may need to ensure that the user has input an address and phone n

113、umber, that the phone number has the right number of digits (and no letters), and that the Social Security number entered is in the appropriate form of nine digits separated by hyphens.</p><p>  Some applica

114、tions require more complex validation, in which you validate that one field is within a range established by two other fields. For example, you might ask in one field what date the customer wishes to arrive at your hotel

115、, and in a second field you might ask for the departure date. When the user books a dinner reservation, you’ll want to ensure that the date the user chooses is between the arrival and departure dates.</p><p>

116、;  There is no limit to the complexity of the validation routines you may need to write. Credit cards have checksums built into their values, as do ISBN numbers. Zip and postal codes follow complex patterns, as do intern

117、ational phone numbers. You may need to validate passwords, membership numbers, dollar amounts, dates, runway choices, or launch codes.</p><p>  In addition, you usually want all of this validation to happen

118、client side so you can avoid the delay of repeated round trips (post backs) to the server while the user is tinkering with his input. In the past, this was solved by writing client-side JavaScript to validate the input,

119、and then writing server-side script to handle input from browsers that don’t support client-side programming. In addition, as a security check, you may want to do server-side validation even though you have validation<

120、;/p><p>  As you can see, in traditional web programming, validation requires extensive custom programming. The ASP.NET framework simplifies this process by providing rich controls for validating user input. In

121、 addition to checking the validity of the data entered, the validation controls allow you to specify how and where error messages will be displayed: either inline with the input controls, aggregated in a summary report,

122、or both.You can use these controls to validate input for HTML and ASP.NET server</p><p>  In this chapter, you’ll learn how to use all these validation controls, and you’ll create a number of pages that you

123、can adapt right away to use on your site.</p><p>  Validation Controls</p><p>  You add validation controls to your ASP.NET document as you would add any other control. As a property of the vali

124、dation control, you specify which other control you’re validating. You may freely combine the various validation controls, and you may even write your own custom validation controls, as you’ll see later in this chapter.&

125、lt;/p><p>  With current browsers that support DHTML, .NET validation is done on the client side, avoiding the necessity of a round trip to the server. (This client-side validation uses JavaScript but is not pa

溫馨提示

  • 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ù)僅提供信息存儲(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)論