我在一个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>
您只为txtPassword
添加asp:RequiredFieldValidator
,因此如果txtPassword2
为空,则不会引发所需的字段错误。需要为txtPassword2
添加asp:RequiredFieldValidator
,还需要指定验证组。因此代码将类似于:
<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>
我也遇到过类似的情况,我希望在"插入"过程中需要密码,并使用RequiredFieldValidators
确保两个密码框都用CompareValidator
完成,以确保它们匹配。
在编辑模式下,我关闭了RequiredFieldValidators
,遇到了同样的问题,如果PasswordConfirm Textbox
为空,它不会停止匹配。
我通过使用2个CompareValidators
来解决这个问题,因为ControlToValidate
和ControlToCompare
字段交换了。这迫使他们相互验证,这样,如果在其中任何一个中键入了任何内容,就会强制检查
<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" />