有时候虽然有了客户端验证,但还是需要一些后台验证。因为有时别人还是可以绕过前端验证啊。微软也封装了各种验证控件,这些验证控件除了用于比较的验证控件,其他的验证控件都是直接继承自BaseValidator。比较验证控件继承BaseCompareValidator,但BaseCompareValidator继承 自BaseValidator。因为都是继承同一个基类,所以所有的验证控件都有很多相同的属性:
ControlToValidate:设置需要验证的控件ID。
 
Display:验证控件的验证信息占据空间的方式。默认为Dynamic,也就是当显示错误信息时,才占据空间。Static,不管验证信息是否信息都占据页面的空间。None不显示验证信息,但是如果页面中有ValidationSummary验证控件,会通过这个控件显示出来。根本原因就是Dynamic在客户端被解析为display:none,Static被解析为visibility:hidden。
 
ErrorMessage:这个一看就知道是设置错误信息了。
EnableClientScript:是否启用客户端验证,默认为true。
IsValid:验证是否通过。
但CompareValidator和RangeValidator都是BaseCompareValidator为基类所以有一个比较特殊的属性,Type属性,值有String、Date、Integer、Double、Currency。还有一个静态方法CanConvert,判断用户输入的是否能转换为指定类型。还有些其他属性就不再列出。现在我们来看看各类验证控件。
1、CompareValidator
CompareValidator继承自BaseCompareValidator 。CompareValidator用于将用户输入的值和另一个值比较,它可以和一个固定的值相比较,也可以和页面中一个控件的属性相比较。所以这个控件有一个ValueToCompare属性(设置一个固定的值),一个ControlToCompare属性(设置需要进行比较的控件ID),我们现在将
主要属性列出来:
 ValueToCompare:设置一个固定的值。如果设置了Type属性, ValueToCompare 的值必须是该类型的有效值。
 
ControlToCompare:设置需要进行比较的控件ID。注意 ValueToCompare和ControlToCompare为互斥性,如果同时设置将采用ControlToCompare。
 
Operator:指定执行的比较操作。如Equal(默认值)、LessThan、GreaterThan等,需要特别说一下的是DataTypeCheck这个值,验证输入的值是否能转换为某种类型的数据。这个时候ControlToCompare属性和ValueToCompare属性都将被忽略。这时候需要设置Type属性。
 
如验证输入是否是日期格式:
 <asp:CompareValidator ID="CompareValidator1"    Type="Date"  runat="server" Operator="DataTypeCheck" ControlToValidate="txtDate"  ErrorMessage="不是日期"></asp:CompareValidator>
  <asp:TextBox ID="txtDate" runat="server" ></asp:TextBox>
 
2、RangeValidator
RangeValidato继承自BaseCompareValidatorr。RangeValidato用于验证输入的值是否在某个范围内,比如规定输入的数值在0到100的范围,只要设置MinimumValue=“0”,MaximumValue=“100”。如果要验证日期的范围,只要设置Type属性就行。
 
 
3、RegularExpressionValidator

RegularExpressionValidator 控件用于验证输入值是否匹配正则表达式指定的模式。ValidationExpression属性规定验证输入控件的正则表达式。在客户端是用的JScript正则表达式,在服务端使用的是.NET Framework中的Regex对象。而JScript正则表达式是Regex模型的子集。所以为了得到统一的结果,尽量使用JScript支持的正则表达式。

4、RequiredFieldValidator

RequiredFieldValidator控件用于验证必填字段。在大多数的情况下只需要验证空字符串就可以了,但有时候并不适用。这个控件有一个InitialValue属性(默认值为空),我们可以为这个属性赋值,当输入控件失去焦点时,它的值还是等于InitialValue属性的值,则验证失败。

 

5、CustomValidator

CustomValidator自定义验证控件,可以根据我们自己设置的逻辑去验证。ClientValidationFunction属性设置前端验证的方法,函数的定义  function 函数名(source, arguments) {},source指向代表验证控件的HTML标签,通常为span,arguments指向一个带有两个属性的对象。这两个属性分别是IsValid和Value,IsValid表示验证是否通过,Value被验证控件的值。

function valid(source, arguments) {

            var num = document.getElementById("txtNumber").value;

            if (num == 123) {

                arguments.IsValid = false;

                source.innerHTML = "验证不通过";

            }

 

        }

 

也可以是用OnServerValidate事件在服务端验证。

 

  protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)

    {

    }

source和args前面说的差不多,不再多说。

最后我们来说输入控件和验证器的关联,实际不是每一个服务器控件都是可以被验证,只有那些通过ValidationProperty指定其被验证的属性的控件才可以。比如TextBox的Text,进行了 [ValidationProperty("Text")]指定。ListBox中的 [ValidationProperty("SelectedItem")]。对于那些没有 [ValidationProperty]标记的控件使用CustomValidator验证是唯一的验证手段。