2010-11-03 134 views
2

我有一個要求多個字段之一是必需的。使用自定義驗證程序甚至會觸發,返回false,但不會顯示錯誤消息並驗證表單。沒有自定義驗證器的錯誤消息

我錯過了什麼?我曾嘗試使用和不使用ValidationSummary。

謝謝!

<asp:CustomValidator ID="CustomValidator1" OnServerValidate="validatePhone" EnableClientScript="false" runat="server" ErrorMessage="Home or Cell Phone is Required" ></asp:CustomValidator> 

<asp:ValidationSummary ID="ValidationSummary1" DisplayMode="BulletList" runat="server" ForeColor="Red" Font-Size="X-Small" Font-Bold="true" /> 


protected void validatePhone(object sender, ServerValidateEventArgs e) 
    { 
     e.IsValid = string.IsNullOrEmpty(txtCellPhone.Text) && string.IsNullOrEmpty(txtHomePhone.Text) ? false : true; 
    } 

回答

1

問題完全是我的錯。在我的提交按鈕上,我做的最後一件事是一個Response.Redirect。消息即將出現,但隨後謝幕頁正在呈現。現在只需要執行Response.Redirect,如果customvalidator返回true。

+0

如果'Page.IsValid = true',你應該只處理代碼。這將檢查ValidationGroup中的所有驗證器是否有效。否則,您可以繞過JavaScript進行驗證。 – rtpHarry 2013-05-24 10:29:05

1

您必須將ControlToValidate設置爲某個TextBox。

<asp:CustomValidator ID="CustomValidator1" OnServerValidate="validatePhone" EnabEnableClientScript="false" runat="server" ErrorMessage="Home or Cell Phone is Required" ControlToValidate="txtHomePhone"/> 
+0

設置ControlToValidate不會驗證控件是否爲空。由於我正在驗證多個控件,所以這不起作用。 – Bleeped 2010-11-04 15:47:45

1

結賬this article。基本上你需要連接客戶端驗證。 添加以下之前關閉表單標籤更改控制名稱需要:

<%-- This configures the validator to automatically--%> 
<%-- update when either of these controls is changed --%> 
<script type="text/javascript"> 
    <!-- 
     ValidatorHookupControlID("<%= MyControl1.ClientID %>", 
     document.getElementById["<%= CustomValidator1.ClientID %>"]); 
     ValidatorHookupControlID("<%= MyControl2.ClientID %>", 
     document.getElementById["<%= CustomValidator1.ClientID %>"]); 
    //--> 
</script> 

或者使用this control

+0

得到它的工作,而不需要客戶端 – Bleeped 2010-11-04 15:45:56