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

相關問題