2014-11-05 101 views
0

我在Web窗体上有两个文本框控件,txtPassword和txtPassword2。CompareValidator缺失值

使用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> 
+2

我不记得CompareValidator不过的RegularExpressionValidator不空的数据。所以你仍然需要RequiredFieldValidator。我认为这是一样的。添加第二个。 – abatishchev 2014-11-05 00:59:42

+0

你需要为txtPassword2添加一个RequiredFieldValidator – sh1rts 2014-11-05 05:00:04

回答

0

你只为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> 
+0

工作正常,但并不完全是我所追求的。 txtPassword是必填字段,txtPassword2不是必填字段(技术上)。由于txtPassword是必需的,因此必须输入一些内容,因为txtPassword2必须与txtPassword相匹配才能使用它(不使用必需的字段验证程序)。 我试图克服的主要问题是当txtPassword不为空时发布的表单,但txtPassword2为空。他们不匹配,那么为什么它不赶上它?对不起,长期评论,我希望这是有道理的.. – mrkd1991 2014-11-07 02:12:39

0

我也有类似的情况,我想密码“插入”期间必要的,用来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" />