CustomValidator的使用方法

来源:互联网 发布:最靠谱的二手交易软件 编辑:程序博客网 时间:2024/06/04 19:02

CustomValidator的使用方法

CustomValidator 是一个提供灵活验证方式的控件,它也能在客户端和服务器端验证,分别提供了两种验证的方法原型:
服务器端验证:

void ServerValidation (object source, ServerValidateEventArgs args)

客户端验证(js):

function ValidationFunctionName(source, arguments)

无论对于客户端验证还是服务器端验证,设置通过验证的办法就是将第二个参数的IsValid属性设置为true即可,反之设置为false。

通过一个例子说明使用方法,验证文本框输入的内容是否为"abcd",如果是,验证通过,否则验证不通过

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
    function Check(source,args)
    {
        //alert(source);source=CustomValidator1,为验证控件
        //alert(args);
       
var obj=document.getElementById("TextBox1");
        if(obj.value=="abcd")
        {
            args.IsValid = true;
        }
        else {
            args.IsValid=false;
        }
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:CustomValidator ID="CustomValidator1" runat="server" 
        ControlToValidate="TextBox1" ErrorMessage="CustomValidator" 
        ValidateEmptyText="True" ClientValidationFunction="Check"></asp:CustomValidator>
    </div>
    </form>
</body>
</html>
如果是输入的"abcd",那么输出到页面上
后台代码:

using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(this.TextBox1.Text);
    }
}




ClientValidationFunction默认的自定义验证函数的参数source就是customvalidator对象,而args指的是一个json对象,其定义为var args = { Value:value, IsValid:true}(args.Value则是所验证对象的值,args.IsValid见上面描述),所以在自定义验证函数里只需source.id/source.errormessage即可得到CustomValidator的相应属性,常规用法如下

HTML code

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

 <form id="form1" runat="server">

<div>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Button ID="Button1" runat="server" Text="Button" />

<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="Validate" ControlToValidate="TextBox1" ValidateEmptyText="true" ErrorMessage="不能为空"></asp:CustomValidator>

</div>

</form>

</body>

<script type="text/javascript">

function Validate(source,args)

{ //CustomValidator的ID和ErrorMessage

window.alert(source.id);

window.alert(source.errormessage);

if(document.getElementById("TextBox1").value=="")

args.IsValid = false;

}

</script>

</html>

不知为什么有时args想引用所验证控件是引用为空,并且像上面的 var obj=document.getElementById("TextBox1");也无法直接调到验证控件,经查看源文件中TextBox1已经变化为别的id值,因此当然无法执行,至于前面的例子为什么能够执行,不清楚。
于是应用原来的知识来解决这样的问题,例如
    <script language="javascript" type="text/javascript">
    function Check(source,args)
    {
       var myDate = new Date();
       var yr= myDate.getYear();        //获取当前年份(2位)
       
       
var obj=document.getElementById("<%=text213.ClientID%>");
       var arr1  =obj.value.split("-") ;
       window.alert(arr1[0]);
        if(Math.abs(arr1[0] -yr)<=18)
        {
            args.IsValid = false;
        }
        else 
        {        
            args.IsValid=true;
        }
    }
    </script>

....
<tr>
            <td class="style4">
                出生日期</td>
            <td>
                <input class="Wdate" runat="server" id="text213" type="text" style="width: 160px; height:16px; border-bottom-style:outset;  border-width:1px; " onfocus="new WdatePicker(this)" /></td>
            <td>
                <asp:CustomValidator ID="CustomValidator1" runat="server" Display="Dynamic" 
                    ErrorMessage="年龄小于18岁不合法" ControlToValidate="text213" ClientValidationFunction="ck"></asp:CustomValidator>
                                    </td>
        </tr>
这样就能解决了
原创粉丝点击