• ASP.net验证控制之CustomValidator控件


      CustomValidator控件也称为自定义验证控件,通过RequiredFieldValidator控件结合CompareValidator控件、RangeValidator控件或RegularExpressionValidator控件之中的一个或多个就能满足asp.net开发中的90%以上的验证要求,但是有一些特殊的验证用上述控件组合无法达到验证要求,比如要求用户填写一个奇数。为了满足一些特殊的验证要求,在asp.net中还有一个CustomValidator控件,在这个控件中可以自己写验证规则。

      CustomValidator类是BaseValidator抽象类,所以CustomValidator控件拥有BaseValidator中定义的属性,除此之外,CustomValidator控件还有以下常见属性:

    属性名  说明
    ClientValidationFunction  用于在客户端执行验证的客户端函数名
    ValidateEmptyText 是否验证空文本,即当所验证控件值为空时时候执行客户端验证

     
       CustomValidator控件用于在客户端验证的函数有两个参数,第一个是表示被验证的控件,第二个表示事件数据。第二个参数有两个属性:IsValid用于表示被验证控件是否通过验证,Value属性表示被验证的控件的值。下面就是一个客户端验证函数的例子:

    <script type="text/javascript">
        //obj表示被验证的控件     //args表示事件数据,args有两个属性     //IsValid指示控件是否通过验证     //Value表示被验证的控件的值     function CheckEven(obj,args)     {       var numberPattern=/\d+/;       //由于控件的ValidateEmptyText设置为true       //所以当控件没有值时进行客户端验证       if(!numberPattern.test(args.Value))//用javascript进行客户端正则验证       {         args.IsValid=false;//表示未通过验证,出现错误提示       }       else if(args.Value%2==0)       {         args.IsValid=true;//表示通过验证,不出现错误提示       }       else       {         args.IsValid=false;//表示未通过验证,出现错误提示       }     }
    </script>

      除了客户端验证之外,在CustomValidator控件中还能自己写服务器端写验证方法,它有一个OnServerValidate事件,同它的客户端处理函数一样,处理这个事件的委托也需要两个参数,第一个是表示被验证的控件,第二个表示事件数据。第二个参数有两个属性:IsValid用于表示被验证控件是否通过验证,Value属性表示被验证的控件的值。它服务器端验证方法设置界面如下:

     asp.net夜话之九:验证控件---(下)

      下面我们用一个例子来说明CustomValidator控件的用法,在这里例子里用户被要求输入两个数,一个必须是2的倍数,一个必须是3的倍数。用CustomValidator控件就能很轻松完成这个功能。

      下面是前台代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CustomValidatorDemo.aspx.cs" Inherits="CustomValidatorDemo"%>
    <!DOCTYPE html PUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title>CustomValidator验证控件用法的例子</title>
      <script type="text/javascript">
        //obj表示被验证的控件
        //args表示事件数据,args有两个属性
        //IsValid指示控件是否通过验证
            //Value表示被验证的控件的值
    
        function CheckEven(obj,args)
        {
          var numberPattern=/\d+/;
          //由于控件的ValidateEmptyText设置为true
          //所以当控件没有值时进行客户端验证
          if(!numberPattern.test(args.Value))
          {
            args.IsValid=false;//表示未通过验证,出现错误提示
          }
          else if(args.Value%2==0)
          {
            args.IsValid=true;//表示通过验证,不出现错误提示
          }
          else
          {
            args.IsValid=false;//表示未通过验证,出现错误提示
          }
        }
        function CheckMultiple3(obj,args)
        {
          //由于控件的ValidateEmptyText没有设置,使用了默认值false
          //所以当控件没有值时不进行客户端验证
          var numberPattern=/\d+/;
          if((!numberPattern.test(args.Value))||(args.Value%3!=0))
          {
            args.IsValid=false;
          }
          else
          {
            args.IsValid=true;
          }
        }
      </script>
    </head>
    <body>
      <form id="form1" runat="server">
          <div>
              <table border="1" width="600">
                  <tr><td colspan="2" align="center">CustomValidator验证控件用法的例子</td></tr>
                  <tr><td>
                    填一个3的倍数</td><td>
                    <asp:TextBox ID="txtOdd" runat="server"></asp:TextBox>
                    <asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="txtOdd"
                         ErrorMessage="请输入3的倍数" ClientValidationFunction="CheckMultiple3" Display="Dynamic" OnServerValidate="CustomValidator2_ServerValidate"></asp:CustomValidator>
                   </td></tr>
                  <tr>
                        <td>填一个偶数</td>
                        <td>
                        <asp:TextBox ID="txtEven" runat="server"></asp:TextBox>
                      <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtEven"
                        ErrorMessage="请输入偶数" ClientValidationFunction="CheckEven" ValidateEmptyText="True" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
                        </td>
                    </tr>
                  <tr><td>
                    <asp:Button ID="Button2" runat="server" Text="提交"/>
                  </td>
                    <td>
                    <input id="Reset3" type="reset" value="重置"/></td>
                    </tr>
              </table>
          </div>
      </form>
    </body>
    </html>

      

      此外,还编写了服务器端验证方法,下面是后台代码:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    public partial class CustomValidatorDemo:System.Web.UI.Page
    {
      protected void Page_Load(object sender,EventArgs e)
      {
    
      }
      //用于验证控件值是否为3的倍数
      protected void CustomValidator2_ServerValidate(object source,ServerValidateEventArgs args)
      {
        System.Text.RegularExpressions.Regex regex=new System.Text.RegularExpressions.Regex(@"\d+");
        //先用正则判断用户输入的是否能转换成数字
        if(!regex.IsMatch(args.Value))
        {
          args.IsValid=false;//表示验证不通过
        }
        else
        {
          //如果对3取模为0就是3的倍数
          args.IsValid=(int.Parse(args.Value)%3==0);
        }
      }
      //用于验证控件值是否为偶数
      protected void CustomValidator1_ServerValidate(object source,ServerValidateEventArgs args)
      {
        System.Text.RegularExpressions.Regex regex=new System.Text.RegularExpressions.Regex(@"\d+");
        //先用正则判断用户输入的是否能转换成数字
        if(!regex.IsMatch(args.Value))
        {
          args.IsValid=false;
        }
        else
        {
          //如果对2取模为0就是偶数
          args.IsValid=(int.Parse(args.Value)%2==0);
        }
      }
    }

      以下是什么也不填写时的验证效果:

     asp.net夜话之九:验证控件---(下)

      在上图中,由于验证奇偶性的CustomValidator验证控件设置了ValidateEmptyText属性为true,所以即使所验证的控件是空值时也会执行客户端验证。从这个例子中可以看出CustomValidator验证控件可以不需要RequiredFieldValidator控件就能实现必填验证,只要将它的ValidateEmptyText属性设为true即可。

      摘自:http://www.poluoluo.com/jzxy/200812/54518.html

  • 相关阅读:
    常见数据结构的Java实现
    ASP.NET WEB API的服务托管(Self-HOST)
    Twitter Bootstrap3小结
    RESTful API后台系统架构设计(Java)
    同步函数的异步化
    C#并行库(TaskParallelLibrary)用法小结
    RestSharp用法小结
    如何选择JAVA培训机构,兼议什么样的人适合培训机构
    从零开始理解JAVA事件处理机制(3)
    简单实用UML关系图解
  • 原文地址:https://www.cnblogs.com/lhl98/p/2748549.html
Copyright © 2020-2023  润新知