为什么ValidatorValidate()验证页面上的所有RequiredFieldValidator控件

Why ValidatorValidate() validates all the RequiredFieldValidator controls on the page?

本文关键字:RequiredFieldValidator 控件 ValidatorValidate 验证 为什么      更新时间:2023-09-26

在下面的代码中为什么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>

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

调用ValidatorValidate()之后,您可以检查验证器是否有效

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" />

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

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

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

本页详细介绍了客户端验证对象模型,该模型有几个JavaScript函数来处理条件求值。查看asp.net客户端验证的验证事件,以获得一个人沿着这些行做什么的示例。

你到底想做什么?

您的script是畸形的

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

在你的版本中,你得到一个javascript错误,函数check没有定义。

第二个验证器也被触发,因为validator总是在回发之前被触发,并且在提交按钮上调用函数check。即使没有显式调用ValidatorValidate,两个验证器也会验证。

如果你不想回发onclick,使用HtmlButton代替:

<input type="button" onclick="check()" value="Check" />
相关文章:
  • 没有找到相关文章