【问题标题】:CompareValidator is missing valuesCompareValidator 缺少值
【发布时间】:2015-01-01 02:12:51
【问题描述】:

我在 Web 表单上有两个文本框控件,txtPassword 和 txtPassword2。

使用 CompareValidator 控件,两个字段都需要匹配。

txtPassword = "" 
txtPassword2 = "" 
No compare error 
txtPassword throws it's required field error

txtPassword = "1" 
txtPassword2 = "" 
No compare error

txtPassword = "" 
txtPassword2 = "1" 
Compare error 
txtPassword throws it's required field error

txtPassword = "1" 
txtPassword2 = "2" 
Compare error

知道为什么 txtPassword2 缺少空白值吗?

代码如下:

<asp:TextBox ID="txtPassword" Text="" TextMode="Password" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Required!" ControlToValidate="txtPassword"></asp:RequiredFieldValidator>

<asp:TextBox ID="txtPassword2" Text="" TextMode="Password" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="Passwords do not match!" ControlToValidate="txtPassword2" ControlToCompare="txtPassword"></asp:CompareValidator>

【问题讨论】:

  • 我不记得 CompareValidator 但 RegularExpressionValidator 不适用于空数据。所以你仍然需要RequiredFieldValidator。我想这里是一样的。添加第二个。
  • 需要为txtPassword2添加RequiredFieldValidator

标签: asp.net .net validation comparevalidator


【解决方案1】:

您只为txtPassword 添加asp:RequiredFieldValidator,因此如果txtPassword2 留空不会引发必填字段错误。您需要添加的一件事是asp:RequiredFieldValidator 用于txtPassword2,并且您还需要指定验证组。因此代码如下:

<asp:TextBox ID="txtPassword" Text="" TextMode="Password" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Required!" ControlToValidate="txtPassword" ValidationGroup="checkNull"></asp:RequiredFieldValidator>

<asp:TextBox ID="txtPassword2" Text="" TextMode="Password" runat="server"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Required!" ControlToValidate="txtPassword2" ValidationGroup="checkNull"></asp:RequiredFieldValidator>

<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="Passwords do not match!" ControlToValidate="txtPassword2" ControlToCompare="txtPassword"></asp:CompareValidator>

【讨论】:

  • 效果很好,但不完全是我所追求的。 txtPassword 是必填字段, txtPassword2 不是必填字段(技术上)。因为 txtPassword 是必需的,所以必须输入一些内容,并且因为 txtPassword2 必须匹配 txtPassword 使其成为必需(不使用必填字段验证器)。我要克服的主要问题是当 txtPassword 不为空白但 txtPassword2 为空白时发布的表单。它们不匹配,为什么它不捕捉它?很抱歉这么长的评论,我希望这是有道理的..
【解决方案2】:

我有类似的情况,我希望在“插入”期间需要密码,并使用 RequiredFieldValidators 确保两个密码框都用 CompareValidator 完成,确保它们匹配。

在编辑模式下,我关闭了 RequiredFieldValidators 并遇到了同样的问题,PasswordConfirm Textbox 如果留空,则不会停止匹配。

我通过使用 2 个 CompareValidators 解决了这个问题,就像交换了 ControlToValidateControlToCompare 字段一样。这迫使他们相互验证,因此如果在其中任何一个中输入任何内容,就会强制进行检查

<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="tbPassword" ControlToCompare="tbConfirmPassword"  Type="String" Display="Dynamic" ForeColor="Red" ErrorMessage="<br />The new passwords do not match" />
<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="tbConfirmPassword" ControlToCompare="tbPassword"  Type="String" Display="Dynamic" ForeColor="Red" ErrorMessage="<br />The new passwords do not match" />

【讨论】:

    猜你喜欢
    • 2022-06-30
    • 2011-12-08
    • 1970-01-01
    • 2012-05-08
    • 2012-04-07
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多