數據驗證控件是asp.net中專門用來驗證表單用戶輸入的控件。比如,requiredfieldvalidation就是一個專門用來驗證用戶是否已經輸入的控件,使用這個控件,可以保證用戶一定輸入了表單的某個表單項(比如數據輸入框)。另外,asp.net還專門提供了以下數據驗證控件:
1. requiredfieldvalidator:檢查用戶是否輸入;
2. comparevalidator:檢查兩個表單輸入項的輸入信息是否存在某種指定關系,比如大、等于等;
3. rangevalidator:檢查用戶輸入是否在某一指定范圍;
4. regularexpressionvalidator:檢查用戶輸入是否符合某一指定的正則表達式要求;
5. customvalidator: 檢查用戶輸入是否符合開發者指定的驗證邏輯規則。
本文的目的不是在于討論以上所有控件的用法,如果希望了解其他控件,可以參看:
http://samples.gotdotnet.com /quickstart /aspplus/doc /webvalidation.aspx。
customvalidator控件概述
簡單地使用前面提到的前四個數據驗證控件,就可以實現我們一般開發的大部分數據表單的驗證要求。然而,有時候我們需要驗證一些比較復雜的表單。想像一下,我們有一個比較復雜的調查表,該調查表包含一個有很多單選按鈕和多選按鈕的表單,一些多選按鈕和個人的愛好相對應,比如游泳、體育、閱讀等,調查表希望被調查人選擇自己的所有愛好。在這些選項下面,提示如下文字:“如果你提示有體育和游泳兩種愛好,請選擇您什么時候開始學習游泳”,在這些文字下方放置一些標識年齡段的單選按鈕,這些按鈕是否有效取決于我們在前面提到的多選按鈕的選擇情況。在以上的驗證情況中,我們就要使用到customvalidator數據驗證控件。
在所有的asp.net數據驗證控件中,都有一個“controltovalidate”的控件屬性需要設置,這個屬性用來指定表單中需要驗證的表單項。在customvalidator數據驗證控件中,需要做以下事情:
1. 讀取需要customvalidator驗證的表單項值;
2. 執行驗證操作;
3. 決定被驗證表單項是否符合驗證要求。
在其他內建控件中,以上步驟用戶是不知道也不要理睬的,但是,在使用customvalidator的時候,我們需要自己動手實現以上步驟。為了實現以上步驟,我們需要編寫一個服務器端數據驗證函數,該函數的樣式如下:
sub functionname(sender as object, args as servervalidateeventargs)
……
end sub
注意以上函數的args參數,它是functionname函數的第二個參數,這個參數有以下兩個屬性:
1. value:被驗證數據表單的值。
2. isvalid:驗證是否通過。如果通過,isvalid的值是true; 如果沒有通過,其值為false。
在使用customvalidator的時候,我們不但要設置“controltovalidate”屬性,我們還必須設置onservervalidate事件來處理服務器端的數據驗證動作。
建立一個簡單的
customvalidator控件
假設現在建立一個與數學有關的網站,在這個網站,我們要求瀏覽者提供自己喜歡的質數,以此來提高我們網站的訪問量。在asp.net中,沒有一個現成的可以專門驗證質數的服務器端數據驗證控件,這樣,我們就有必要用到customvalidator控件。
以下例子用來驗證用戶輸入的數是不是質數。在這個表單中,有一個用戶輸入數據的textbox控件和一個button控件,還有用于驗證是不是質數的customvalidator控件,和兩個用于保證用戶輸入為正數的comparevalidator控件。
< script language=“vb” runat=“server” >sub btnsubmit_click(sender as object, e as eventargs)if page.isvalid then response.write(“< font color=““red””> < i>”& txtprimenumber.text & “is, indeed, a good prime number. < /i>< /font>”)else response.write(“< font color=““red””>< i>” & txtprimenumber.text & “is < b>not< /b> a prime number.< /i>< /font>”) end if end sub sub primenumbercheck(sender as object, args as servervalidateeventargs) dim iprime as integer = cint(args.value),iloop as integer, isqrt as integer = cint(math.sqrt(iprime)) for iloop = 2 to isqrt if iprime mod iloop = 0 then args.isvalid = false exit sub end if next args.isvalid = true end sub< /script>< form method=“post” runat=“server”> enter your favorite prime number:< asp:textbox id=“txtprimenumber” runat=“server” />< %-- 建立customvalidator 控件 --%> < asp:customvalidator runat=“server” id=“custprimecheck” controltovalidate=“txtprimenumber” onservervalidate=“primenumbercheck” errormessage=“invalid prime number”/>< %-- 建立兩個comparevalidator控件:第一個保證輸入為數字;第二個保證輸入為正數 --%> < asp:comparevalidator runat=“server” id=“compprimenumber”operator=“datatypecheck” type=“integer” display=“dynamic” controltovalidate= “txtprimenumber”errormessage = “you must enter an integer value.”/> < asp:comparevalidator runat=“server” id=“compprimenumberpositive”operator=“greaterthan” type=“integer” display=“dynamic” valuetocompare=“0” controltovalidate=“txtprimenumber” errormessage =“you must enter a value greater than zero.”/> < p>< asp:button id=“btnsubmit” runat= “server”onclick=“btnsubmit_click” text=“submit” />< /form>
如果對判定質數不是太熟悉,可能對于以上的primenumbercheck事件處理感覺比較迷惑。首先,將用戶在txtprimenumber輸入的數據通過事件的args.value傳送給txtprimenumber,然后,將用戶的輸入開平方根,再將用戶輸入的數字除以從2到剛才算出的平方根之間的每一個數字。如果出現結果為零的情況,說明用戶輸入的數字不是質數,設置args.isvalid為false; 如果全部為零,說明用戶輸入合法,設置args.isvalid為true。
客戶端驗證
asp.net內建數據驗證控件的一大特點就是它們的所有驗證都是在客戶端進行的,不需經過服務器端,而customvalidator控件的錯誤驗證完全是通過服務器端實現的。必須意識到的一點是,不管是否通過客戶端實現數據驗證,服務器端的數據驗證是一定會產生的。增加客戶端驗證的功能,只是讓我們的數據驗證控件更加友好。
為了實現客戶端驗證的功能,我們必須使用javascript或者vbscript寫一個腳本函數,因為vbscript只支持ie瀏覽器,因此,這里我們采用javascript來編寫這個函數:
< script language=“javascript” >< !--  function checkprime(sender, args)  { var iprime = parseint(args.value);    var isqrt = parseint(math.sqrt(iprime));    for (var iloop=2; iloop< =isqrt; iloop++)      if (iprime % iloop == 0)       { args.isvalid = false;         return;      }  args.isvalid = true;  }// -->< /script >在這個例子里面,我們輸入數字6,然后按“tab”按鈕。在高版本的瀏覽器里面,我們將看到來自customvalidator控件的錯誤信息,這樣,我們的customvalidator控件也就有了客戶端驗證功能。在以上代碼中,可能已經注意到我們并沒有定義數據sender和args的類型,因為在腳本語言中,是沒有嚴格的數據類型定義的。
為了實現客戶端數據驗證,惟一要做的就是在customvalidator控件定義中加入以下語句:clientvalidationfunction=“checkprime”,這里,其實就是指定自定義驗證控件的客戶端驗證函數。在這個例子里,前面定義的“checkprime”函數就是客戶端驗證函數。
總結
上面我們介紹了asp.net中幾乎是功能最靈活的數據驗證控件customvalidator的使用,介紹了customvalidator控件的服務器端驗證和客戶端驗證的實現。盡管在實際的開發工作中,可能我們使用asp.net的內置數據驗證控件幾乎完全可以滿足我們的開發要求,但是若能了解customvalidator控件的使用和特點將會更有利于解決在工作中碰到的數據驗證問題。
新聞熱點
疑難解答
圖片精選