ASP.NET:即使使用了必需的字段验证程序,自定义验证也无法正常工作

这是我的Web表单控件的代码

<asp:TextBox runat="server" ID="txtUsername"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtUsername" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
<asp:CustomValidator OnServerValidate="checkUsername" ID="CustomValidator1" runat="server" ControlToValidate="txtUsername" EnableClientScript="true" ClientValidationFunction="checkUsername" ErrorMessage="CustomValidator"></asp:CustomValidator>

客户端验证

<script type="text/javascript">
        function checkUsername(source,args){
        alert("test");
           /* alert(args.Value);
            args.IsValid=false;
            */
        }
    </script>

服务器端验证

protected void checkUsername(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e) {
            String str=e.Value;
            if(str.Length>6)
            e.IsValid = false;
        }

但由于某种原因,这个Costom验证没有解雇.有线索吗?

编辑:
我是第一次使用asp编写代码,服务器验证是在代码隐藏类中

这是一个代码asp.net页面,也许我正在制作一些小错误?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Registration.aspx.cs" Inherits="lab1.Registration" %>

<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:Button ID="Button1" runat="server" Text="Recreate table" 
            onclick="Button1_Click" />
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>

    </div>
    <script type="text/javascript">
        function checkUsername(source,args){
        args.IsValid=(args.Value.length<=6);
           /* alert(source.Value);
            args.IsValid=false;
            alert(document.getElementById("txtUsername").nodeValue);*/
        }
    </script>
    <asp:Table ID="Table1" runat="server" Height="106px" Width="469px">

        <asp:TableRow>
            <asp:TableCell>
                <asp:Label runat="server" Text="Username"></asp:Label>
            </asp:TableCell>
            <asp:TableCell>
                <asp:TextBox runat="server" ID="txtUsername"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtUsername" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
                <asp:CustomValidator OnServerValidate="checkUsername" ID="CustomValidator1" runat="server" ControlToValidate="txtUsername" EnableClientScript="true" ClientValidationFunction="checkUsername" ErrorMessage="CustomValidator"></asp:CustomValidator>

            </asp:TableCell>
        </asp:TableRow>

    </asp:Table>

    </form>
</body>
</html>
最佳答案
好的,尝试改变这两种方法.

<script type="text/javascript"> 
    function checkUsername(source,args){    
        args.IsValid=(args.Value.length<=6);
    }
</script>

protected void checkUsername(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e)
{
    e.IsValid = (e.Value.Length <= 6);
}

唯一真正的区别是它可以解决真实和错误的IsValid,而不是仅将其设置为false.

如果这不是问题,那么请详细说明究竟什么不起作用.

编辑:只是添加到这…如果它只是你感兴趣的输入长度,那么为什么不使用RegularExpressionValidator?

转载注明原文:ASP.NET:即使使用了必需的字段验证程序,自定义验证也无法正常工作 - 代码日志