自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET數(shù)據(jù)驗(yàn)證控件CustomValidator的使用淺析

開(kāi)發(fā) 后端
ASP.NET數(shù)據(jù)驗(yàn)證控件是ASP.NET中專(zhuān)門(mén)用來(lái)驗(yàn)證表單用戶(hù)輸入的控件。那么數(shù)據(jù)驗(yàn)證控件CustomValidator主要是什么呢?怎么使用呢?本文就向你講述相關(guān)內(nèi)容。

ASP.NET數(shù)據(jù)驗(yàn)證控件的強(qiáng)大是因?yàn)樵贏SP中進(jìn)行表單數(shù)據(jù)驗(yàn)證時(shí),通常開(kāi)發(fā)者必須自己編寫(xiě)一套驗(yàn)證的規(guī)則,然后自己將這些代碼拷貝到ASP代碼中對(duì)表單進(jìn)行驗(yàn)證。這樣進(jìn)行驗(yàn)證的方式實(shí)在不太方便,幸運(yùn)的是,ASP.NET解決了這個(gè)問(wèn)題,這就是數(shù)據(jù)驗(yàn)證Web控件。

ASP.NET數(shù)據(jù)驗(yàn)證控件CustomValidator控件概述

簡(jiǎn)單地使用前面提到的前四個(gè)數(shù)據(jù)驗(yàn)證控件,就可以實(shí)現(xiàn)我們一般開(kāi)發(fā)的大部分?jǐn)?shù)據(jù)表單的驗(yàn)證要求。然而,有時(shí)候我們需要驗(yàn)證一些比較復(fù)雜的表單。想像一下,我們有一個(gè)比較復(fù)雜的調(diào)查表,該調(diào)查表包含一個(gè)有很多單選按鈕和多選按鈕的表單,一些多選按鈕和個(gè)人的愛(ài)好相對(duì)應(yīng),比如游泳、體育、閱讀等,調(diào)查表希望被調(diào)查人選擇自己的所有愛(ài)好。在這些選項(xiàng)下面,提示如下文字:“如果你提示有體育和游泳兩種愛(ài)好,請(qǐng)選擇您什么時(shí)候開(kāi)始學(xué)習(xí)游泳”,在這些文字下方放置一些標(biāo)識(shí)年齡段的單選按鈕,這些按鈕是否有效取決于我們?cè)谇懊嫣岬降亩噙x按鈕的選擇情況。在以上的驗(yàn)證情況中,我們就要使用到CustomValidator數(shù)據(jù)驗(yàn)證控件。

在所有的ASP.NET數(shù)據(jù)驗(yàn)證控件中,都有一個(gè)“ControlToValidate”的控件屬性需要設(shè)置,這個(gè)屬性用來(lái)指定表單中需要驗(yàn)證的表單項(xiàng)。在CustomValidator數(shù)據(jù)驗(yàn)證控件中,需要做以下事情:

1. 讀取需要CustomValidator驗(yàn)證的表單項(xiàng)值;

2. 執(zhí)行驗(yàn)證操作;

3. 決定被驗(yàn)證表單項(xiàng)是否符合驗(yàn)證要求。

在其他內(nèi)建控件中,以上步驟用戶(hù)是不知道也不要理睬的,但是,在使用CustomValidator的時(shí)候,我們需要自己動(dòng)手實(shí)現(xiàn)以上步驟。為了實(shí)現(xiàn)以上步驟,我們需要編寫(xiě)一個(gè)服務(wù)器端數(shù)據(jù)驗(yàn)證函數(shù),該函數(shù)的樣式如下:

  1. Sub FunctionName(sender as Object, args as ServerValidateEventArgs)  
  2.  
  3. ……  
  4.  
  5. End Sub 

注意以上函數(shù)的args參數(shù),它是FunctionName函數(shù)的第二個(gè)參數(shù),這個(gè)參數(shù)有以下兩個(gè)屬性:

1. Value:被驗(yàn)證數(shù)據(jù)表單的值。

2. IsValid:驗(yàn)證是否通過(guò)。如果通過(guò),IsValid的值是True; 如果沒(méi)有通過(guò),其值為False。

在使用CustomValidator的時(shí)候,我們不但要設(shè)置“ControlToValidate”屬性,我們還必須設(shè)置OnServerValidate事件來(lái)處理服務(wù)器端的數(shù)據(jù)驗(yàn)證動(dòng)作。

建立一個(gè)簡(jiǎn)單的ASP.NET數(shù)據(jù)驗(yàn)證控件CustomValidator

假設(shè)現(xiàn)在建立一個(gè)與數(shù)學(xué)有關(guān)的網(wǎng)站,在這個(gè)網(wǎng)站,我們要求瀏覽者提供自己喜歡的質(zhì)數(shù),以此來(lái)提高我們網(wǎng)站的訪(fǎng)問(wèn)量。在ASP.NET中,沒(méi)有一個(gè)現(xiàn)成的可以專(zhuān)門(mén)驗(yàn)證質(zhì)數(shù)的服務(wù)器端數(shù)據(jù)驗(yàn)證控件,這樣,我們就有必要用到CustomValidator控件。

以下例子用來(lái)驗(yàn)證用戶(hù)輸入的數(shù)是不是質(zhì)數(shù)。在這個(gè)表單中,有一個(gè)用戶(hù)輸入數(shù)據(jù)的TextBox控件和一個(gè)Button控件,還有用于驗(yàn)證是不是質(zhì)數(shù)的CustomValidator控件,和兩個(gè)用于保證用戶(hù)輸入為正數(shù)的CompareValidator控件。

  1. ﹤ script language=“vb” runat=“server” ﹥  
  2. Sub btnSubmit_Click(sender as Object, e as EventArgs)  
  3. If Page.IsValid then  
  4.   Response.Write(“﹤ font color=““red””﹥  
  5.   ﹤ i﹥”& txtPrimeNumber.Text & “is, indeed, a good prime number.  
  6.   ﹤  /i﹥﹤  /font﹥”)  
  7. Else  
  8. Response.Write(“﹤ font color=““red””﹥  
  9.  ﹤ i﹥” & txtPrimeNumber.Text & “is ﹤ b﹥not﹤ /b﹥   
  10.  a prime number.﹤ /i﹥﹤ /font﹥”)  
  11. End If  
  12.   End Sub  
  13.   Sub PrimeNumberCheck(sender as Object, args as 
  14.   ServerValidateEventArgs)  
  15. Dim iPrime as Integer = Cint(args.Value),  
  16.  iLoop as Integer, iSqrt as Integer = CInt(Math.Sqrt(iPrime))  
  17. For iLoop = 2 to iSqrt  
  18.   If iPrime mod iLoop = 0 then  
  19. args.IsValid = False  
  20. Exit Sub  
  21.   End If  
  22. Next  
  23. args.IsValid = True  
  24.   End Sub  
  25. ﹤ /script﹥  
  26. ﹤ form method=“post” runat=“server”﹥  
  27.   Enter your favorite prime number:  
  28. ﹤ asp:textbox id=“txtPrimeNumber” runat=“server” /﹥  
  29. ﹤ %-- 建立CustomValidator 控件 --%﹥  
  30.   ﹤ asp:CustomValidator runat=“server”   
  31. id=“custPrimeCheck”  
  32. ControlToValidate=“txtPrimeNumber”  
  33. OnServerValidate=“PrimeNumberCheck”  
  34. ErrorMessage=“Invalid Prime Number”/﹥  
  35. ﹤ %-- 建立兩個(gè)CompareValidator控件:***個(gè)保證輸入為數(shù)字;  
  36. 第二個(gè)保證輸入為正數(shù) --%﹥  
  37.   ﹤ asp:CompareValidator runat=“server”  
  38.   id=“compPrimeNumber”O(jiān)perator=“DataTypeCheck”  
  39.   Type=“Integer”  
  40.   Display=“Dynamic” ControlToValidate=  
  41.   “txtPrimeNumber”ErrorMessage =  
  42.   “You must enter an integer value.”/﹥  
  43.   ﹤ asp:CompareValidator runat=“server”   
  44.   id=“compPrimeNumberPositive”O(jiān)perator=“GreaterThan”  
  45.   Type=“Integer”  
  46.   Display=“Dynamic” ValueToCompare=“0”  
  47.   ControlToValidate=“txtPrimeNumber”  
  48.   ErrorMessage =“You must enter a value   
  49.   greater than zero.”/﹥  
  50.   ﹤ p﹥﹤ asp:button id=“btnSubmit” runat=  
  51.   “server”O(jiān)nClick=“btnSubmit_Click” Text=“Submit” /﹥  
  52. ﹤ /form﹥ 

如果對(duì)判定質(zhì)數(shù)不是太熟悉,可能對(duì)于以上的PrimeNumberCheck事件處理感覺(jué)比較迷惑。首先,將用戶(hù)在txtPrimeNumber輸入的數(shù)據(jù)通過(guò)事件的args.value傳送給txtPrimeNumber,然后,將用戶(hù)的輸入開(kāi)平方根,再將用戶(hù)輸入的數(shù)字除以從2到剛才算出的平方根之間的每一個(gè)數(shù)字。如果出現(xiàn)結(jié)果為零的情況,說(shuō)明用戶(hù)輸入的數(shù)字不是質(zhì)數(shù),設(shè)置args.isValid為False; 如果全部為零,說(shuō)明用戶(hù)輸入合法,設(shè)置args.isValid為T(mén)rue。

ASP.NET數(shù)據(jù)驗(yàn)證控件之客戶(hù)端驗(yàn)證

ASP.NET內(nèi)建數(shù)據(jù)驗(yàn)證控件的一大特點(diǎn)就是它們的所有驗(yàn)證都是在客戶(hù)端進(jìn)行的,不需經(jīng)過(guò)服務(wù)器端,而CustomValidator控件的錯(cuò)誤驗(yàn)證完全是通過(guò)服務(wù)器端實(shí)現(xiàn)的。必須意識(shí)到的一點(diǎn)是,不管是否通過(guò)客戶(hù)端實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證,服務(wù)器端的數(shù)據(jù)驗(yàn)證是一定會(huì)產(chǎn)生的。增加客戶(hù)端驗(yàn)證的功能,只是讓我們的數(shù)據(jù)驗(yàn)證控件更加友好。

為了實(shí)現(xiàn)客戶(hù)端驗(yàn)證的功能,我們必須使用JavaScript或者VBScript寫(xiě)一個(gè)腳本函數(shù),因?yàn)閂BScript只支持IE瀏覽器,因此,這里我們采用JavaScript來(lái)編寫(xiě)這個(gè)函數(shù):

  1. ﹤ script language=“JavaScript” ﹥  
  2. ﹤ !--  
  3.   function CheckPrime(sender, args)  
  4.   { var iPrime = parseInt(args.Value);  
  5. var iSqrt = parseInt(Math.sqrt(iPrime));  
  6. for (var iLoop=2; iLoop﹤ =iSqrt; iLoop++)  
  7.   if (iPrime % iLoop == 0)   
  8.   { args.IsValid = false;  
  9.  return;  
  10.   }  
  11.   args.IsValid = true;  
  12.   }  
  13. // --﹥  
  14. ﹤ /script ﹥ 

在這個(gè)例子里面,我們輸入數(shù)字6,然后按“Tab”按鈕。在高版本的瀏覽器里面,我們將看到來(lái)自CustomValidator控件的錯(cuò)誤信息,這樣,我們的CustomValidator控件也就有了客戶(hù)端驗(yàn)證功能。在以上代碼中,可能已經(jīng)注意到我們并沒(méi)有定義數(shù)據(jù)sender和args的類(lèi)型,因?yàn)樵谀_本語(yǔ)言中,是沒(méi)有嚴(yán)格的數(shù)據(jù)類(lèi)型定義的。

為了實(shí)現(xiàn)客戶(hù)端數(shù)據(jù)驗(yàn)證,惟一要做的就是在CustomValidator控件定義中加入以下語(yǔ)句:ClientValidationFunction=“CheckPrime”,這里,其實(shí)就是指定自定義驗(yàn)證控件的客戶(hù)端驗(yàn)證函數(shù)。在這個(gè)例子里,前面定義的“CheckPrime”函數(shù)就是客戶(hù)端驗(yàn)證函數(shù)。

ASP.NET數(shù)據(jù)驗(yàn)證控件CustomValidator的使用總結(jié)

上面我們介紹了ASP.NET中幾乎是功能最靈活的數(shù)據(jù)驗(yàn)證控件CustomValidator的使用,介紹了CustomValidator控件的服務(wù)器端驗(yàn)證和客戶(hù)端驗(yàn)證的實(shí)現(xiàn)。盡管在實(shí)際的開(kāi)發(fā)工作中,可能我們使用ASP.NET的內(nèi)置數(shù)據(jù)驗(yàn)證控件幾乎完全可以滿(mǎn)足我們的開(kāi)發(fā)要求,但是若能了解CustomValidator控件的使用和特點(diǎn)將會(huì)更有利于解決在工作中碰到的數(shù)據(jù)驗(yàn)證問(wèn)題。

ASP.NET數(shù)據(jù)驗(yàn)證控件CustomValidator的使用的基本情況就向你介紹到這里,希望對(duì)你有所幫助。

【編輯推薦】

  1. 有關(guān)ASP.NET代碼分離的一些討論
  2. ASP.NET代碼分離使用的一點(diǎn)體會(huì)
  3. ASP.NET數(shù)據(jù)驗(yàn)證技術(shù)研究詳解
  4. ASP.NET代碼分離之網(wǎng)站建設(shè)應(yīng)用淺析
  5. ASP.NET代碼優(yōu)化淺析
責(zé)任編輯:仲衡 來(lái)源: etc.edu.cn
相關(guān)推薦

2009-08-04 15:20:59

ASP.NET數(shù)據(jù)驗(yàn)證數(shù)據(jù)驗(yàn)證控件

2009-07-27 17:25:53

ASP.NET驗(yàn)證控件

2009-08-04 15:36:16

2009-08-07 17:59:35

控件設(shè)計(jì)器

2009-08-04 15:02:18

ASP.NET數(shù)據(jù)驗(yàn)證

2009-08-05 16:50:09

ASP.NET For

2009-08-05 16:17:29

ASP.NET For

2009-08-07 15:34:15

ASP.NET數(shù)據(jù)綁定

2009-08-06 15:21:45

ASP.NET控件開(kāi)發(fā)RenderConte

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-07 17:49:44

控件設(shè)計(jì)器

2009-07-24 09:57:25

ASP.NET HTM

2009-08-03 18:15:05

ASP.NET數(shù)據(jù)綁定

2009-11-26 09:02:59

ASP.NET數(shù)據(jù)控件

2009-08-07 17:41:07

ASP.NET Web

2009-08-07 14:40:36

RegularExprASP.NET驗(yàn)證控件

2009-07-29 14:12:45

ASP.NET tra

2009-08-03 10:07:20

ASP.NET Ses

2009-08-10 14:55:43

ASP.NET htt

2009-08-07 16:32:52

ASP.NET控件設(shè)計(jì)時(shí)支
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)