2011-10-18 99 views
0

我有一個讓我發瘋的問題。在我的頁面上,我有一個Javascript驗證和兩個ASP.NET驗證器。驗證結果僅取決於Javascript的結果。這意味着如果Javascript返回true ASP.NET驗證器未被檢查。Javascript驗證覆蓋ASP.NET驗證器

的Javascript代碼是:

<script type="text/javascript"> 

    function Validate() { 
     var ddlObj = document.getElementById('<%=ddStatus.ClientID%>'); 
     var txtObj = document.getElementById('<%=txtComment.ClientID%>'); 
     if (ddlObj.selectedIndex != 0) { 
      if (txtObj.value == "") { 
       alert("Any change of Status requires a comment!"); 
       txtObj.focus(); 
       return false; 
      } 
     } 
    } 
</script> 

代替兩個ASP.NET驗證器是:

<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox> 
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" /> 
         </td> 

<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox> 
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td> 

任何人都可以幫助?由於

UPDATE:

我調用JavaScript從一個按鈕:

<asp:Button runat="server" ID="btnSubmit" Text="Save New Product" 
style="cursor:hand" OnClick="btnSubmit_Click" /> 

但我註冊從代碼隱藏屬性:

protected void Page_Load(object sender, EventArgs e) 
{ 
    btnSubmit.Attributes.Add("OnClientClick", "return Validate()"); 
} 
+0

@Darin季米特洛夫:謝謝看到更新 – CiccioMiami

回答

1

您可以從Validate()函數內觸發客戶端驗證的:

validate = function(){ 
    bool isValid = Page_ClientValidate(""); //triggers validation 
    if (isValid){ 
     var ddlObj = document.getElementById("<%=ddStatus.ClientID%>"); 
     var txtObj = document.getElementById("<%=txtComment.ClientID%>"); 
     if (ddlObj.selectedIndex != 0) { 
      if (txtObj.value == "") { 
       alert("Any change of Status requires a comment!"); 
       txtObj.focus(); 
       isValid = false; 
      } 
     } 
    } 
    return isValid; 
} 

標記:

<asp:Button runat="server" OnClientClick="return validate();" ... /> 
+0

你的解決方案看起來很完美,但它不起作用。我嘗試了許多不同的組合,但沒有成功如果我實際填寫由ASP.NET驗證器管理的兩個文本框,如何檢查Page_ClientValidate是否返回true?謝謝 – CiccioMiami

+0

您希望驗證執行的順序是什麼? –

+0

你確定這不是套管問題。我的函數被稱爲「驗證」,而你的是「驗證」。JavaScript非常關注套管。 –

1

OK,有一個這裏有一些事情是錯誤的。

如果你夠關心他做驗證,你必須經常做服務器端驗證除了客戶端。客戶端驗證非常用戶友好且響應速度快,但只需將JavaScript設置爲「關閉」即可繞過它!

我不明白,你已經告訴你控制哪些JavaScript函數,當他們確認打電話?您使用RequiredFieldValidators,不需要外部功能 - 但隨後嘗試使用您的Validate()函數進行自定義驗證。

如果你最終使用CustomValidator,那麼你需要改變你的函數的'簽名'。它需要的形式

function validateIt(sender, args){ 
      var testResult = //your validation test here 
      args.IsValid = testResult; 
     } 
+0

感謝您的回答。我知道它應該伴隨着服務器端驗證,但是它更容易執行。我更喜歡有一個客戶端驗證工作,而不是實現服務器端。關於您的其他問題,請參閱我的更新 – CiccioMiami

+0

您需要做的是使用「CustomValidator」並執行所有驗證。沒有必要的'RequiredFieldValidator'和自定義驗證。 – Widor