日期:2011-09-09  浏览次数:20424 次

数据验证控件是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事件处理感觉比较迷惑。首先,将用户在