3

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

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

回答

7

您需要返回从检查()的东西,否则,它的运行它,然后通过和做正常页面验证。

调用ValidatorValidate()后,您可以检查是否

function check() { 

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

你做的isValid验证有一个额外}在那里。

还需要在对的OnClientClick

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

谢谢!现在问题得到解决。 – jams

2

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

或者,您也可以用CustomValidator代替RequiredFieldValidator,并根据您的需要进行有条件的检查。

如果你真的想这样做客户端验证处理,检查出http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx#ClientSideValidation_ClientValidationObjectModel

这个页面有上有一些JavaScript函数来处理条件评估客户端验证对象模型细节。查看Validation event for asp net client side validation,了解一个人正在沿着这些方向行事的例子。

你到底做专?有人可能可以帮助您获得正确的设置。

+0

感谢链接一回扔! – jams

2

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

感谢您的帮助。 – jams

相关问题