表單驗證服務(wù)器控件
驗證介紹
網(wǎng)絡(luò)形成框架包括一套易用而功能強大的用于驗證的服務(wù)器控件,用來檢查輸入表單的錯誤,并且在必要的時候,向用戶顯示提示信息。將驗證控件添加到設(shè)計圈套表格,就像添加其他服務(wù)器控件一樣。驗證控件有不同的驗證類型,例如范圍檢查或者模式匹配,添加一個requiredfieldvalidator 控件可以保證用戶不能跳過某一個要求輸入內(nèi)容的字段。你可以對一個輸入控件組合若干個驗證控件。例如,你可能要求某一字段不能為空,并且必須輸入某一個范圍的值。驗證控件與服務(wù)器控件的有限子集協(xié)同工作。也就是說,對于不同的控件,可能需要驗證不同屬性的值。
驗證控件類型
最簡單的驗證表單是要求輸入字段。不管用戶在字段中輸入了任何值,它就是驗證通過的。如果頁面中所有的字段都驗證通過,那么頁面也是驗證通過的(page is valid)。下面的例子說明了requiredfieldvalidator驗證控件的使用。
特定的驗證情況需要不同的驗證控件,例如范圍檢查或者模式匹配。
客戶端驗證
一般來說,驗證控間總是在服務(wù)器端執(zhí)行驗證檢查。 然而,如果用戶正在使用一個支持 dhtml 的瀏覽器工作,驗證控間也能使用客戶端腳本來驗證。藉由客戶端確認,當表單提交給服務(wù)器的時候,客戶端的任何檢測的錯誤都可以發(fā)現(xiàn)。當任何一個驗證控間發(fā)現(xiàn)錯誤的時候,提交到服務(wù)器的表單都會取消,同時顯示驗證控間的text 屬性。這就允許用戶在表單提交到服務(wù)器之前,校正輸入的錯誤。當包含錯誤的字段失去焦點的時候,該字段馬上會被重新驗證。這樣就給用戶提供了一種豐富的、交互式的驗證過程。
注意:web forms頁框架總是在服務(wù)器端執(zhí)行驗證,即使驗證已經(jīng)在客戶端執(zhí)行也是如此。這有助于防止冒名頂替和預(yù)訂事務(wù)來通過驗證。
默認情況下允許客戶端驗證。如果客戶端條件允許,高版本瀏覽器驗證模式將自動執(zhí)行。要想禁止客戶端驗證,設(shè)置頁面的 clienttarget 屬性為"downlevel"("uplevel" 強制客戶端驗證)
顯示驗證錯誤信息
當用戶的輸入開始處理(例如,當表單已經(jīng)提交),web forms頁面框架傳遞用戶的輸入到相關(guān)聯(lián)的驗證控件。驗證控件測試用戶的輸入,并且設(shè)置屬性來標志輸入是否通過驗證測試。所有的驗證控件運行完畢之后,才設(shè)置頁面的isvalid屬性。如果任何一個驗證控件顯示了驗證失敗,整個頁面的驗證也是無效的。
如果驗證控件監(jiān)測到錯誤,該控件或者頁面上的validationsummary 控件就會在頁面上顯示一條錯誤提示信息。validationsummary 控件顯示錯誤提示的前提是頁面的isvalid等于false。(也就是說,任何一個驗證控件沒有通過,都會激活validationsummary),它可以監(jiān)測到每一個驗證控件的驗證錯誤,并且把所有的錯誤一次全部顯示出來。下面的例子演示了validationsummary控件如何進行錯誤提示的。
使用比較驗證控件comparevalidator
comparevalidator服務(wù)器驗證控件用來比較兩個控件的值。它使用三個關(guān)鍵屬性來進行它的驗證。controltovalidate 和 controltocompare 包含要比較的值,operator 定義了要進行的比較類型---例如,等于或者不等于等等。comparevalidator通過對表達式求值來執(zhí)行驗證,就象下面這樣:
( controltovalidate controltocompare )
如果表達式的值為true,驗證結(jié)果為通過。
下面的例子說明了如何使用 comparevalidator 控件
使用范圍驗證控件 rangevalidator
rangevalidator 服務(wù)器控件測試輸入值是否在一個給定范圍之內(nèi)。rangevalidator 使用三個關(guān)鍵屬性來執(zhí)行驗證。 controltovalidate 包含驗證的對象,minimumvalue 和 maximumvalue 定義了有效范圍的最小值和最大值。
下面的例子顯示了如何使用rangevalidator 控件。
使用正則表達式驗證控件regularexpressionvalidator
regularexpressionvalidator 服務(wù)器控件用來檢查用戶輸入是否與正則表達式定義的模式匹配。這個控件允許你檢查可預(yù)見的字符串系列,例如社會保障號碼、電子郵件地址、電話號碼和郵政編碼等等。
regularexpressionvalidator 使用兩個關(guān)鍵屬性來執(zhí)行驗證。controltovalidate 包含要驗證的控件對象, validationexpression 包含用來匹配的正則表達式。
原教材對正則表達式說得比較少,這里我來補充一下:
正則表達式是一種功能強大的字符串定義規(guī)則,例如dos下熟悉的“*” 和“?” 他最早在unix中引入。在asp.net中,他的格式是[可接受字符]{ 范圍}。舉例來說,[a-z]{ 3,7}表示至少含有三個字符,最多含有7個字符,其中字符只能是’a’~’z’的范圍,如”krpam”是合法的,而”12fe3”或者”5w”是不合法的。
在[]里面除了?-?的定義之外,也可以直接寫出可接受的字符,例如[ourasp]表示只接受’o’、’u’、’r’、’a’、’s’、’p’這幾個字符,而^表示反集合,例如[^aurasp],表示除了’o’、’u’、’r’、’a’、’s’、’p’以外,任何字符都接受。如果表示可接受任意字符,使用“.”來表示。例如, .{ 0,} 表示可以接受任意多個任意字符。
在{ }里面,除了常用的{ 3}、{ 2-13}這樣的格式以外,還有以下常用的格式:{ n,} 表示至少輸入n個字符。
“|” 符號表示or(或),例如[a-za-z]{ 3}|[0.9]{ 3}表示可接受的字符是3個英文字母或者3個數(shù)字字符。請注意他與[a-za-z0-9]{ 3}的區(qū)別。為了閱讀上的方便,我們通常會把含有“|”符號的字符串放在()中,例如([a-za-z]{ 3}|[0.9]{ 3})上述的[]{ }.()|都是正則表達式中的特殊符號。如果希望可接受的字符串中包含這些字符,必須在這些字符前面加上斜線 /。例如,“/.{ 3}”,表示必須輸入3個”.”。
下面的例子演示如何使用 validationexpression控件。
使用自定義驗證控件 custom validation
customvalidator 服務(wù)器控件調(diào)用用戶自定義函數(shù)來執(zhí)行一個標準驗證控件無法處理得驗證。該自定義函數(shù)既可以在服務(wù)器端執(zhí)行,也可以在客戶端腳本(如vbscript 或jscript)。對于客戶端自定義驗證,自定義函數(shù)名稱必須在clientvalidationfunction 屬性中明確指出。自定義函數(shù)必須使用這樣的參數(shù)格式:
function myvalidator(source, arguments)
注意 source 參數(shù)是客戶端customvalidator ,arguments參數(shù)是帶有兩個屬性value 和 isvalid的對象, value 屬性對象的值, isvalid 屬性是一個布爾值,用來設(shè)置返回的驗證結(jié)果。
對于服務(wù)器端自定義驗證,將你的自定義驗證放置在驗證控件的onservervalidate 中。
下面的例子演示了如何使用customvalidator 控件。
使用全部驗證控件的例子
下面的例子演示了一個典型的注冊表單,其中使用了本章討論的所有驗證控件
本章小結(jié)
1、驗證控件可以用來檢驗web forms 頁面的任何輸入。
2、對于一個給定的輸入字段,可以使用若干個驗證控件來檢驗。
3、除了服務(wù)器端驗證以外,也可以使用客戶端驗證來提高form的可用性。
4、customvalidator 控件可以讓用戶自定義驗證規(guī)則。
新聞熱點
疑難解答
圖片精選