2011-08-25 111 views
0

以下代碼用於驗證表單提交按鈕何時被命中,但我沒有收到想要的結果。Asp.Net自定義驗證控件不顯示錯誤消息

它應該顯示錯誤消息,但它們沒有被顯示我做錯了什麼?

自定義驗證驗證密碼,它應根據所發生的錯誤更改錯誤信息:

  1. 密碼爲空
  2. 密碼無效
  3. 密碼不匹配

一次只能顯示一個錯誤,所以我在.ascx.cs中編寫了這個自定義validator:

protected void cvPasswordValidation_ServerValidate(object source, ServerValidateEventArgs args) 
    { 

     bool IsPasswordBlank = false; 
     bool IsPasswordValid = false; 

     cvPasswordValidation.IsValid = false; 

     // If password is blank then IsValid is false, show blank password errors. 
     if (String.IsNullOrEmpty(args.Value)) 
     { 

      //args.IsValid = false; 
      IsPasswordBlank = true; 
      //Show blank password error depending on which box is empty. 
      if (String.IsNullOrEmpty(txtPassword.Text)) 
      { 
       cvPasswordValidation.ErrorMessage = "You must enter password"; 
      } 
      else 
      { 
       cvPasswordValidation.ErrorMessage = "You must confirm password"; 
      } 
      cvPasswordValidation.IsValid = false; 

     } 
     else 
     { 
      cvPasswordValidation.IsValid = true; 
     } 

     // If password is not valid format then IsValid is false, show invalid format errors. 
     if (!Regex.IsMatch(args.Value, RegexHelper.ValidPassword)) 
     { 

      IsPasswordValid = true; 
      //Show invalid format errors, if password is not blank 
      if (IsPasswordBlank == false) 
      { 
       cvPasswordValidation.ErrorMessage = "<b>Current password</b> not in correct format. Your password must contain 6 - 12 characters with a combination of numbers and letters."; 
      } 
      cvPasswordValidation.IsValid = false; 
     } 
     else 
     { 
      cvPasswordValidation.IsValid = true; 
     } 

     // If passwords do not match then IsValid is false, show do not match errors. 
     bool areEqual = String.Equals(txtPassword.Text, txtConfirmPassword.Text, StringComparison.Ordinal); 

     if (areEqual == false) 
     { 

      //Show do not match errors is password is not blank and is not invalid format 
      if (IsPasswordBlank == false && IsPasswordValid == false) 
      { 
       cvPasswordValidation.ErrorMessage = "Your passwords do not match."; 
      } 
      cvPasswordValidation.IsValid = false; 
     } 
     else 
     { 
      cvPasswordValidation.IsValid = true; 
     } 

    } 

和的.ascx:

<asp:TextBox runat="server" ID="txtPassword" MaxLength="12" autocomplete="off" TextMode="Password" ValidationGroup="vgOnlineDetails"></asp:TextBox> 

<asp:CustomValidator ID="cvPasswordValidation" 
       runat="server" 
       display="Dynamic" 
       OnServerValidate="cvPasswordValidation_ServerValidate" 
       ControlToValidate="txtPassword" 
       ValidationGroup="vgOnlineDetails"> 
</asp:CustomValidator> 
+1

你的問題是什麼?驗證器是否無效,請解釋發生了什麼/出錯,併發布實際使用驗證器的標記。 –

+0

錯誤消息不會顯示,我不確定如何正確調試驗證器想要了解我剛剛獲得的標記。 – Anicho

+1

一旦你設置了'cvPasswordValidation.IsValid = false;'在任何情況下,你能不能從處理程序中返回? – NaveenBhat

回答

2

您需要設置ValidateEmptyText = true才能驗證空字段。

+0

這似乎是答案,它不驗證空的文本字段,當我在驗證中鍵入的東西似乎工作正常:D。只需要測試項目,如果一切檢查將接受答案:)。 – Anicho

+0

接受的答案,因爲它解決了我正在討論的錯誤沒有顯示的主要問題。如果您仍然沒有收到錯誤消息,請閱讀Igor Blinnikov的答案,因爲IsValid始終爲真。 – Anicho

1

你建議立即進行刪除分配到IsValid屬性後使用return。當你根本沒有指定密碼時的情況。如果分配後未指定return,則將執行全部三個if語句。在最後ifareEqual變量將是true,因爲兩個空字符串相等,並且cvPasswordValidation.IsValid = true;將被執行。在這種情況下,你的文本框將是有效的。

+0

你能舉一個快速代碼的例子嗎? – Anicho

+0

我終於明白你的意思了,只需在'args.IsValid = false;返回;'仍然給我同樣的問題。 – Anicho

相關問題