版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 中文7300字,4800單詞,27000英文字符</p><p> 本科畢業(yè)設計(論文)外文翻譯譯文</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> 起止頁碼: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> 《學習ASP.NET3.5》</p><p><b> 第五章 驗證</b></p><p> 正如你在前面所看到的的章節(jié),許多web應
4、用程序涉及到用戶輸入。然而,不幸的是,用戶易犯跳過所需字段而輸入六位數(shù)的電話號碼,然后返回各種格式不正確的數(shù)據(jù)到您的應用程序。你的數(shù)據(jù)庫例程會阻塞損壞的數(shù)據(jù),訂單可能會丟失。不正確的輸入信用卡號碼或省略地址可能導致錯過銷售機會。好在您可以在編寫代碼檢查用戶的輸入之前就了解你的數(shù)據(jù)庫代碼,或任何其他危險。這個過程中驗證用戶的輸入被稱為驗證.</p><p> 傳統(tǒng)上,這需要大量的時間和精力來編寫可靠的驗證代碼。你
5、需要檢查每個字段并創(chuàng)建例程來確保數(shù)據(jù)的完整性。如果發(fā)現(xiàn)問題數(shù)據(jù),你需要顯示一個錯誤消息,這樣用戶就可以知道哪里有問題并且如何改正。</p><p> 在任何給定的應用程序中,你可以選擇驗證數(shù)據(jù)格式正確性,或者該值下降的給定范圍,某些字段值。例如,如果您正在處理一個訂單,您可能需要確保用戶輸入一個地址和電話號碼,電話號碼是已經(jīng)正確的號碼數(shù)字(沒有字母),安全號碼在適當形式下集體輸入時是九位數(shù)由連字符分隔。<
6、/p><p> 有些應用程序需要更復雜的驗證,你確認一個領(lǐng)域在一定范圍內(nèi)由兩個其他領(lǐng)域建立。例如,您可能會問客戶希望什么日期到達你的酒店,你也可能會問他的離開日期。當用戶有一個晚餐預訂,你會想要確保用戶選擇到達和離開日期。</p><p> 您需要編寫的驗證例程可能對復雜性沒有限制。信用卡已經(jīng)構(gòu)建到他們的校驗值和ISBN編號。Zip和郵政編碼遵循復雜的模式,例如國際電話號碼。你可能需要驗證
7、密碼,會員數(shù)量、金額、日期、跑道選擇,或啟動代碼。</p><p> 此外,你通常想要所有這些驗證發(fā)生在客戶端,這樣你就可以避免在用戶猶豫他的輸入時延遲的重復往返(postbacks)到服務器。在過去,這是解決通過編寫客戶端JavaScript驗證輸入,然后編寫服務器端腳本處理輸入,從瀏覽器不支持客戶端編程。作為一個安全檢查,即使你在瀏覽器中實現(xiàn)驗證,你可能想做服務器端驗證,因為用戶可以繞過客戶端驗證的代碼創(chuàng)建
8、一個惡意網(wǎng)頁,偽裝成合法頁面這個策略稱為欺騙)。通常,這些安全措施涉及寫作你的驗證代碼兩次,一次在客戶端,一次在服務器。</p><p> 正如您可以看到的,在傳統(tǒng)的網(wǎng)絡編程中,驗證需要廣泛的定制編程。ASP.NET框架通過提供豐富的控件來驗證用戶輸入簡化了這個過程。除了檢查輸入數(shù)據(jù)的有效性,還有驗證控件允許您指定如何以及在何處會報錯:是內(nèi)聯(lián)與輸入控制,聚合在一個總結(jié)報告,或兩者兼而有之。您可以使用這些控件來驗
9、證輸入HTML和ASP.NET服務器控件。在這一章,你將學習如何使用所有這些驗證控件,您將創(chuàng)建大量的頁面,直至你可以馬上適應以及正確使用你的網(wǎng)站。</p><p><b> 驗證控件</b></p><p> 當你想添加任何其他控制時,你可以添加驗證控件到你的ASP.NET文檔中。作為一個屬性驗證控制器,你可以指定其他控制驗證。也可以自由組合各種驗證控件,甚至可以
10、編寫自己的自定義驗證控件,您將在本章后面的內(nèi)容中看到。</p><p> 當前支持DHTML,.NET驗證的瀏覽器是應用在客戶端完成方面,避免了返回到服務器的必要。(這個客戶端驗證使用JavaScript但不屬于AJAX庫)如果是老的瀏覽器,你的代碼是不會改變的,但是需要在服務器端驗證發(fā)送到客戶的代碼。</p><p> 每當頁面試圖返回服務器時就要驗證。即使有時你并不想要任何驗證發(fā)生
11、,例如點擊取消按鈕這種情況。為了防止在這些情況下驗證,許多回傳控制這樣的按鈕,如按鈕,圖像按鈕,鏈接按鈕,列表控件,文本框有一個原因驗證屬性,你可以設置來決定當頁面上控件的默認事件引發(fā)時是否執(zhí)行驗證。</p><p> 如果原因驗證設置為true,如果控制頁面上的驗證失敗則返回的默認值是不會發(fā)生。這是一個很棘手的問題,因為這意味著頁面將不會發(fā)布到服務器,除非所有的頁面上的控制是在有效狀態(tài)。如果原因驗證設置為fa
12、lse,那么,當按鈕是用來發(fā)布頁面時沒有驗證發(fā)生在。</p><p> 有時你需要允許繼續(xù)回傳,即使一些控制頁面是無效的。例如,假設您有一個頁面,該頁面收集兩個地址和稅務信息。該頁面上的一個按鈕處理地址字段可能之前用戶已經(jīng)進入一些不相關(guān)的稅務信息。然而,如果需要的一個稅收字段缺失,頁面不會發(fā)布。</p><p> 通過使用驗證組屬性你可以解決這個問題。你可以組一個導致返回的群驗證控件一
13、起控制,僅僅群成員中的驗證控件將被應用。在這個示例中,在允許地址按鈕發(fā)布之前您可以要求所有的地址控制是有效的,但允許后即使一些稅收字段無效的。</p><p> ASP.NET包含了以下驗證控件:</p><p><b> 必填驗證控件</b></p><p> 確保用戶不離開字段空白和跳過你的輸入控制。一個必填驗證控件可以綁定到一個文本
14、框,這意味著頁面只會通過驗證用戶輸入到文本框的東西。在選擇控件時,比如下拉或單選按鈕,必填驗證控件確保用戶作出選擇而不是默認您指定的值。這個必填驗證控件不檢查數(shù)據(jù)的有效性;它只確保被輸入或選擇的數(shù)據(jù)。</p><p><b> 范圍驗證控件</b></p><p> 確保輸入的值是在一個指定的上下邊界。您可以指定范圍是在一對數(shù)字(比如大于10和小于100),一對字
15、符(大于D和不到K),或一對的日期(1/1/08之后,2/28/08之前)。</p><p><b> 比較驗證控件</b></p><p> 比較了對另一個用戶輸入的值,它可以比較你在設計時指定的一個值,或?qū)傩灾颠M行另一個控制,也可以對數(shù)據(jù)庫進行比較。</p><p><b> 常規(guī)驗證控件</b></p&
16、gt;<p> 其中一個最強大的驗證器,是比較了用戶的輸入,使用正規(guī)表達提供給你。正規(guī)表達式是一種強有力的用來匹配一個模式的字母、數(shù)字或符號的好方法,您將在之后的章節(jié)看到。你可以使用這個驗證器檢查有效的集體安全號碼、電話號碼、密碼強度,等等。</p><p><b> 自定義驗證控件</b></p><p> 如果這些控制都沒有滿足您的需要,您可以
17、創(chuàng)建您自己使用的自定義驗證控件。這個檢查用戶輸入的反對任何算法而提供一個自定義的算法。</p><p> 在本章的其余部分,我們將介紹如何在ASP.NET應用中使用每種控件驗證數(shù)據(jù)。</p><p><b> 必填驗證控件</b></p><p> 必需的字段驗證器可以確保用戶你的控制提供了一個值為,使得在有下拉列表的情況下,用戶選擇除了
18、默認值還可以其他選擇。</p><p> 首先,創(chuàng)建一個新的叫必填驗證控件的網(wǎng)站。在本節(jié)中,你要創(chuàng)建如在設計視圖中圖5-1顯示的發(fā)貨選擇web頁面。正如你在任意數(shù)量的web站點所看到的,這是一個非常標準的運輸形式。你可以想象試圖把這樣一個頁面嵌入到您自己的網(wǎng)站。</p><p> 雖然ASP.NET驗證控件做大部分客戶端使用JavaScript的工作,但他們不使用或依賴于AJAX,包括
19、腳本管理器的控制,所以你不需要將其用于此頁面。</p><p> 圖5-1 發(fā)貨選擇頁面包含必填驗證控件控制用以保證用戶在每個字段的選擇當用戶單擊登錄按鈕時,頁面驗證以確保每個字段已經(jīng)被修改。如果不是,則出錯的字段用紅色標記為錯誤消息如圖5-2</p><p> 您將使用一個五行三列的HTML表來創(chuàng)建頁面布局,進入必要的控制。用從以前的章節(jié)學過的東西,你可以直接在源視圖,或利用表向?qū)?/p>
20、很容易地創(chuàng)建表,所以我們就在這里講了。添加控件形式也非常容易。</p><p> 第一列包含一些描述性的標題為輸入字段的表,與中間列包含控制來進行驗證(下拉列表,單選按鈕列表,和文本框)。第三列將包含驗證控件和一些錯誤消息的顯示。</p><p> 表的第一行應該是一個合并了三列的單元(使用HTML和并列的屬性),它包含一個顯示任何信息的標簽。設置ID的標簽和設置文本屬性為一個空字符串
21、(Text="")。</p><p> 圖5-2 這個頁面的用戶在點擊提交時沒有提供任何發(fā)貨信息,所以必填驗證控件返回錯誤,你可以在右邊看到</p><p> 第一行輸入控件在中間列命名ddl托運人的用戶有一個下拉列表,使用列表項集合編輯器為發(fā)貨人設置值。</p><p><b> 列表如下:</b></p&g
22、t;<p> ——請選擇一個發(fā)貨人,</p><p><b> 美國郵政</b></p><p><b> 隔夜快遞</b></p><p><b> 聯(lián)合航運服務</b></p><p><b> 萬海航運</b></p&g
23、t;<p><b> 小馬快遞</b></p><p><b> 星際飛船運輸車</b></p><p> 你很快就會看到第一項是特別重要的。</p><p> 你想要每個字段驗證,添加一個必填驗證控件控制。打開驗證部分的工具箱,并拖動三個必填驗證控件控制表,進入第三單元的每個三中間行,如圖5-1所示
24、。</p><p> 這個必填驗證控件控制有自己的ID,它還要求你想驗證的ID控件。因此,設置第一必填驗證控件的ID添加到rfv發(fā)貨人,并為ddl發(fā)貨人設置控制驗證屬性(驗證的下拉列表)。目前,你不需要刪除文本的錯誤性能。如果用戶不做出選擇,你將需要給用戶顯示一些文本,因此包括在開始和結(jié)束之間的控制標記文本“請選擇一個發(fā)貨人”。你也可以設置此文本使用文本屬性。</p><p> 必填驗
25、證控件有一個額外的屬性初值,在這種情況下,你應該為下拉框中被驗證的控制設置初始值。如果用戶單擊提交,這個初始值將被拿來與下拉的默認值比較,如果他們是相同的,將會顯示錯誤消息。這迫使用戶改變初始值。在本例中,第一項的下拉是一些文本要求用戶做出的選擇。這不是一個有效的選擇,所以你需要通過向文本提示一樣設置初始值來確保用戶是否選擇別的東西。如果你有一個默認的發(fā)貨人,不想用初值,這僅僅是防止用戶從默認值選擇。所有這一切都在源視圖中顯示為以下代碼
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> 確保顯示屬性設置為靜態(tài)(默認),它告訴ASP.NET來分配頁面上驗證器是否有消息顯示。如果你設置為動態(tài)、空間不會被分配到就顯示錯誤消息。
28、動態(tài)分配是很強大的,但是它可以給你的控件在頁面上來回反彈顯示的消息。我們將立刻向你展示。</p><p> 在第二個輸入行,添加一個單選按鈕列表稱為實時阻止列表緊急,正如先前圖5-1所示。給第二個必需字段驗證器的ID Rfv緊迫感,并設置其屬性來控制驗證這項緊迫,確保一個在實時阻止列表的單選按鈕被選中緊迫性。同時,改變文本屬性為“請選擇一個緊迫感”:</p><p> 這次你不需要顯示
29、一個初始值。因為控制是一個單選按鈕列表,驗證器知道用戶需要選擇一個按鈕;如果任何按鈕被選中,驗證都是合適的。</p><p> 最后,完成這個例子中,在第三排添加一個多行文本框和一個ID的txt指令。使用被命名為rfv指令的第三必填驗證控件要求用戶輸入一些文本。驗證器很簡單;設置文本框作為控制驗證,并輸入錯誤信息“請?zhí)峁┨厥庵噶睢钡轿谋緦傩浴?lt;/p><p> 在一個真正的網(wǎng)站,特別指
30、令字段可能是可選的,但對于這個示例我們要求它可選。</p><p> 最后一行,在中間列放置被稱之為提交按鈕,并設置其文本為“提交”。在后臺代碼文件中唯一的代碼需要是事件處理程序的提交按鈕。在設計視圖雙擊按鈕,你會像往常一樣送往點擊事件處理程序。突出顯示的代碼示例輸入5-1。</p><p> 例5-1。必填驗證控件的單擊按鈕事件處理程序檢查驗證每一個頁面上的控制</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> 當單擊提交按鈕時驗證每個控制檢查,如果每個控制是有效的,則可用的頁面屬性將返回true。</p><p> 現(xiàn)在,返回和設置顯示驗證控件的動態(tài)
34、屬性。當運行應用程序時看看會發(fā)生什么。沒有空間分配給驗證控制,瀏覽器將會考慮你的表只有兩列寬而不是三個。表不分配任何空間驗證信息,并且將只承認一個欄的提示和其他的控件。當你驗證控件(通過點擊提交按鈕)此表將會擴大,這既可能令人不安也可能很吸引人,取決于你如何設計頁面的布局。在本例中,您可以看到控制跳來跳去,當你點擊提交,結(jié)果可能不是你想要的,所以要回去改變控件以返回靜態(tài)。</p><p> 再回頭看看例5-1。
35、注意到評論說,將永遠不可能執(zhí)行else子句。回想一下,驗證發(fā)生在客戶端。如果頁面是無效的,則從來沒有發(fā)布到服務器和服務器端代碼不運行(當然,除非你設置原因驗證屬性為false,正如本章開頭提到)。</p><p> 你可以讓你的頁面對用戶更友好一點通過將焦點放到第一個控制驗證失敗。為此,為每個驗證控制添加設置焦點錯誤屬性為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> 再次運行應用程序,然后單擊提交按鈕不用添加特殊的指令。驗證后,你不但要提供給它們的消息,而且重點是注意在這個文本框控件中輸入文本。如果你不止在一個控制器設置焦點錯誤,亦或者頁面無效,焦點將被設置為第一控制,驗證失敗,這個屬性設置為true。</p><p> 完整的源代碼標記文件,default.aspx,對于本例中列出的例子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> 驗證信息概要控件</b></p><p> 正如你在前面示例中看到的,把驗證反饋到每個控件是有用的,但它可能會導致一些布局問題。幸運的是,ASP.NET可以讓你決定你想要怎樣的驗證錯誤報告。例如,不是把錯誤信息伴隨控制,你可以隨著驗證總結(jié)控制總結(jié)所有的驗證失
67、敗。這種控制可以將錯誤總結(jié)在一個無序列表,一個簡單的列表,或一個出現(xiàn)web頁面或彈出消息框段落的其他地方。</p><p> 為了了解它是如何工作的,創(chuàng)建一個叫必填驗證控件摘要的必填驗證控件副本web應用程序。切換到源視圖。從驗證部分的工具箱,拖動驗證摘要控制到井底頁面,</table>標記后。</p><p> 復制一個網(wǎng)站的步驟來介紹一個新網(wǎng)站,如附錄B所示。</
68、p><p> 設置驗證摘要控制屬性的值突出在以下代碼片段(當然也可以在屬性窗口):</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> 做這個工作,你需要向其他驗證控制添加一個錯誤信息屬性。例如,修改第一驗證控制發(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> 注意,,本次是在星號(*)后而不是在文本屬性中為驗證器添加開始標記,。如果這個控制報告驗證錯誤,在錯誤信息屬性中的文本將被顯示在摘要。你已經(jīng)修改驗證器顯示星號而不是更完整的錯誤消息?,F(xiàn)在</p><p>
73、 你有一個摘要,只需要標記錯誤而不需要通過控制顯示一個完整的錯誤消息。目前,類似的變化對于其他每個必填驗證控件同樣適用(您可以使用錯誤文本顯示在圖5-3,或隨時即興發(fā)揮)。</p><p> 運行應用程序,并單擊提交按鈕并且不做出任何選擇,這樣就沒有驗證控件過關(guān)。結(jié)果顯示在圖5-3。</p><p> 圖5-3中,把提出的驗證錯誤摘要作為一個無序列表。雖然我們已經(jīng)把它明確,但這是默認的
74、顯示模式。消息通過分別設置顯示模式屬性的驗證總結(jié)子彈列表,列表,或單獨的段落,也可以顯示為一個簡單的列表或一個段落。</p><p><b> 比較驗證器</b></p><p> 雖然能夠確保用戶做出某種類型的條目是偉大的,但是你會經(jīng)常想在一定的準則下驗證條目內(nèi)容。一個常見的要求是比較用戶的輸入到一個恒定值,這個值的另一個控制,或數(shù)據(jù)庫值。</p>
75、<p> 看到這個工作時,使一個新的必填驗證控件摘要網(wǎng)站的副本并命名為比較驗證器的網(wǎng)站。在這個例子中,您將添加一個新的控制詢問用戶她期望獲得一個多少包的裝運。</p><p> 圖5-3 當你使用一個驗證摘要時控制無法通過驗證。很明顯,但更重要的是,頁面上會出現(xiàn)總結(jié)告訴用戶到底怎么了</p><p> 這樣做,首先你需要在行包含提交按鈕之前添加一個新的表行。也可以在源設
76、計視圖中這樣做,雖然后者使它很簡便。</p><p> 點擊任何地方的行包含提交按鈕。然后,單擊右鍵,彈出菜單,得到選擇一個插入,然后在當前行上面插入一個新表,如圖5-4。</p><p> 在選定行之上插入一個空白的HTML表行。新的一行,在正確的表格插入一些標題文本,一個文本框(稱之為txtNum包),一個必需的字段驗證器,和一個比較驗證器。你可能想調(diào)整布局切換到源視圖與<b
77、r/>控件之間的兩個驗證。調(diào)整兩個新確認器的屬性,見例5-3。</p><p> 圖5-4 當你選擇一個表行并單擊右鍵,彈出菜單讓你選擇在你想要的單元插入一個新行</p><p> 例5-3。這個比較控制器比較控制一組值</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)在看起來好像設計視圖和兩個驗證控件在過去的單元環(huán)繞</p><p> 圖5-5 在設計視圖中一個新的帶有文本框的表行對必填驗證控件和比較驗證控件進行驗證</p><p> 再次運行應用程序,并嘗試進入各種域值。你會看到,如果你輸入0,或者一個負數(shù),驗證失敗。如果你輸入一個正數(shù),控制通過了驗證。如果你把它空白,你會發(fā)現(xiàn)它仍然失敗。沒有必填驗證控件
85、,不過也沒有通過。</p><p> 兩個驗證器放置到相同的單元表格,同時驗證相同的控制:txtNum包,需要必填驗證控件,因為比較驗證器無效的時候始終返回true或空值,聽起來較直觀。</p><p> 在這種情況下,比較驗證器的指定常數(shù)的屬性獲取一個常數(shù)零。運算屬性決定了將如何比較(即如何輸入值必須與指定的常數(shù)有關(guān))。</p><p> 操作符屬性的可能值
86、是相等,不相等,大于,大于等于,少于,不等于和數(shù)據(jù)類型檢查。在這個示例中,要想有效,輸入值必須比較恒定大于這個值。用戶必須發(fā)送超過零包,或者放入更多的相關(guān)條款。</p><p> 你必須使用類型屬性讓控制知道使用哪種類型的值。類型屬性接受一個驗證數(shù)據(jù)類型的枚舉值:貨幣,日期、對(一對是VB中對于一個非整數(shù)來說的,即一個十進制數(shù)),整數(shù)或字符串。在這個例子中,這個值為整數(shù),因此相比,進入(例如)字符可能會導致驗證
87、失敗。</p><p><b> 檢查輸入類型</b></p><p> 需要檢查的包數(shù)量可能大于零,這個數(shù)量是一個數(shù)字(而不是一個字母或日期)。要做到這一點,你要對比較控制器做一個小的改變。</p><p> 刪除比較值的屬性和運算符屬性大于數(shù)據(jù)類型檢查。因為類型屬性為整數(shù),該控件將報告任何整數(shù)值作為有效值。使用下面的代碼來替換,為您在
88、最后一節(jié)中添加驗證比較器:</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)在,再次運行該應用程序,并嘗試在文本框中輸入的隨機數(shù)據(jù)。你會發(fā)現(xiàn)數(shù)字,為零或甚至為負數(shù),通過驗證,還會出現(xiàn)別的失敗。你可以想象這種驗證將對訂單號碼,信用卡號碼,或任何其他數(shù)據(jù)類型地方比較重要的地方是非常有益的。</p><p><b> 對比另一個控制</b></p><p> 你可以將一個控件與另
91、一個控件中的值而不是常數(shù)相比較。經(jīng)典的使用表現(xiàn)在可能要求用戶兩次輸入自己的密碼,然后驗證這兩項是否都相同。</p><p> 常見的情況是你要求用戶輸入一個新密碼。為了安全,在輸入密碼時,文本用星號偽裝。因為這將是用戶需要登錄的密碼,您必須驗證用戶輸入密碼的如預期并沒有錯誤。典型的解決方案是要求用戶第二次輸入密碼,然后檢查每次輸入的密碼是否相同。對于這種情況比較驗證器是非常適合的。</p><
92、;p> 為了證明這一點,你需要在頁面上添加兩個表行,每個都可以作為密碼字段的文本框使用。這些密碼字段的第一個具有所需字段驗證器控件 ;第二個會有一個所需字段驗證器和比較驗證器。同樣也可以在設計視圖中或直接在源視圖中,添加這些行和控件。無論哪種方式,標記看起來示例5-4中列出的類似。一定要設置正確的控件來驗證所有這些新的驗證控件的屬性,以及其他屬性。</p><p> 例5-4。你可以執(zhí)行密碼驗證使用比較
93、控制器控制比較兩個控制</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ù)測試,如果您輸入的字符串不匹配,控制系統(tǒng)將無法通過驗證。</p><p> 第一個新的表行里包含將其文本模式屬性設置為密碼文本框控件。它也包含了所需的字段驗證,以確保用戶不離開使字段空白。</p><p> 第二行包含第二密碼文本框和第二個必要的字段驗證(此外,用戶可以不離開空白領(lǐng)域),但是它使用了一個比較驗證器檢查相
106、關(guān)的文本框的值(密碼文本框2)和第一個文本框(密碼文本框1),以驗證它們都具有相同的內(nèi)容。操作屬性設置為相等,且類型屬性設置為字符串,所以這兩個字符串必須匹配。請注意設置這兩個屬性:</p><p> ControlToValidate="txtPassword2"</p><p> ControlToCompare="txtPassword1"
107、</p><p> 這兩個文本框必須有一個必填字段驗證器。如果比較驗證器反對為null或空字符串值,它將通過驗證。</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- asp.net外文翻譯
- asp.net外文翻譯
- asp.net 外文翻譯
- asp.net 和 .net framework外文翻譯
- asp.net概述外文翻譯
- 外文翻譯--asp.net技術(shù)
- 外文翻譯---從經(jīng)典asp到asp.net
- 外文翻譯--- asp.net 概述
- asp.net 概述外文翻譯
- 外文翻譯--ASP.NET 技術(shù).doc
- 外文翻譯--ASP.NET技術(shù).doc
- ASP.NET概述外文翻譯.doc
- 外文翻譯--ASP.NET技術(shù).doc
- asp.net語言外文翻譯
- 外文翻譯--ASP.NET 技術(shù).doc
- asp.net體系結(jié)構(gòu)外文翻譯
- asp.net網(wǎng)頁的生成【外文翻譯】
- asp.net初探
- asp論文外文翻譯---從底層了解asp.net的結(jié)構(gòu)
- 外文翻譯--asp.net技術(shù)和vb語言
評論
0/150
提交評論