2011-08-25 112 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

相关问题