3

在下面的代码中为什么ValidatorValidate(v)验证RequiredFieldValidator页面上的所有控件?它应该只执行RequiredFieldValidator1not 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>
4

3 回答 3

9

你需要从 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" />
于 2011-10-03T21:00:35.140 回答
2

script的格式不正确。

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

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

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

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

<input type="button" onclick="check()" value="Check" />
于 2011-10-03T20:58:25.947 回答
2

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

或者,您也可以根据需要替换RequiredFieldValidatorwithCustomValidator并进行条件检查。

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

此页面包含有关客户端验证对象模型的详细信息,该模型具有一些 JavaScript 函数来处理条件评估。查看Validation 事件以获取 asp 网络客户端验证的示例,了解一个人在这些方面所做的事情。

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

于 2011-10-03T20:55:18.180 回答