【问题标题】:Why ValidatorValidate() validates all the RequiredFieldValidator controls on the page?为什么ValidatorValidate() 会验证页面上的所有RequiredFieldValidator 控件?
【发布时间】:2011-10-03 20:45:16
【问题描述】:

在以下代码中 为什么ValidatorValidate(v) 验证页面上的所有RequiredFieldValidator 控件?它应该只执行RequiredFieldValidator1 而不是RequiredFieldValidator2
这是代码。

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript">
        function check() {

            var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
            ValidatorValidate(v);

        }
        </script>    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
            <br />
            <asp:Button ID="Button1" runat="server" OnClientClick="check()" Text="Check" />

        </div>

        </form>
</body>
</html>

【问题讨论】:

    标签: javascript asp.net requiredfieldvalidator validation-controls


    【解决方案1】:

    你需要从 check() 中返回一些东西,否则,它正在运行它,然后通过并进行正常的页面验证。

    调用ValidatorValidate()后,可以检查validator是否有效

    function check() {
    
            var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
            ValidatorValidate(v);
    if (v.isvalid)
         return true;
    else
         return false;
    }
    

    你确实还有一个额外的 }。

    您还需要为 OnClientClick 输入一个返回值

    <asp:Button ID="Button1" runat="server" OnClientClick="return check()" Text="Check" />
    

    【讨论】:

      【解决方案2】:

      发生这种情况是因为一旦您单击按钮,就会在回发时验证所有这些按钮。您需要将它们按ValidationGroup 分组或使用check() 中的return false; 来停止回发。

      或者,您也可以将RequiredFieldValidator 替换为CustomValidator,并根据您的需要进行条件检查。

      如果您真的想进行客户端验证器处理,请查看http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx#ClientSideValidation_ClientValidationObjectModel

      此页面详细介绍了客户端验证对象模型,该模型具有一些用于处理条件评估的 JavaScript 函数。查看Validation event for asp net client side validation 以了解某人在这些方面所做的事情的示例。

      你想具体做什么?有人可能会帮助您进行正确的设置。

      【讨论】:

        【解决方案3】:

        您的script 格式错误。

        <head>
            <script type="text/javascript">
                 function check() {
                     var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
                     ValidatorValidate(v);
                 }
           </script>    
        </head>
        

        在您的版本中,您收到一个 JavaScript 错误,指出函数 check 未定义。

        第二个验证器也会被触发,因为验证器总是在回发之前触发,并且您的函数check 在提交按钮上被调用。即使您没有明确调用 ValidatorValidate,这两个验证器都会进行验证。

        如果您不想回发 onclick,请改用 HtmlButton:

        <input type="button" onclick="check()" value="Check" />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-11
          • 1970-01-01
          • 2023-04-07
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多