我在使用CompareValidator和ValidationSummary时遇到了一些奇怪的行为。
例如下面的.aspx文件(没有相关的C#代码隐藏,所以只需通过新的.aspx文件中的以下代码,运行并观察行为)。
这些(精炼的)步骤:
这些步骤的结果略有不同,因为焦点更改是通过键盘进行的:
为什么您需要对“提交”按钮执行两个操作(一个操作以使其集中,一个点击它)以更新ValidationSummarry?
(比较的旧步骤: 1.在两个文本框中都不输入任何内容,然后按SubmitButton 2.现在,您将在验证摘要中获得项目符号列表,并在SubmitButton前面显示两个验证行 3.现在在TextBox1中输入“foo”,在TextBox2中输入“bar”,然后按SubmitButton 4.现在,您将两个项目保留在项目符号列表中,并且“两个文本框值应该相同”。在SubmitButton前面 5.现在再次按SubmitButton 6.现在ValidationSummary正确包含“两个文本框值不相等”。 广告4:为什么ValidationSummary只包含一个项目符号“两个文本框值应该相同。”? )
<asp:ValidationSummary ID="ValidationSummary" runat="Server" ShowSummary="true" DisplayMode="BulletList" />
<asp:Label ID="lbl" AssociatedControlID="TextBox1" runat="Server" Text="Write into TextBox" />
<asp:TextBox ID="TextBox1" runat="Server" />
<asp:TextBox ID="TextBox2" runat="Server" />
<asp:RequiredFieldValidator ID="req1" runat="Server" ControlToValidate="TextBox1"
ErrorMessage="1st TextBox is Mandatory field" Text="<br>Please write something in 1st Box." />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="Server" ControlToValidate="TextBox2"
ErrorMessage="2nd TextBox is Mandatory field" Text="<br>Please write something in 2nd Box." />
<asp:CompareValidator ID="CompareValidator1" runat="Server" ControlToValidate="TextBox2"
ControlToCompare="TextBox1" Operator="Equal" Type="string" Text="Both textbox values should be same."
ErrorMessage="Both textbox values are not equal." Display="Dynamic" />
<asp:Button ID="SubmitButton" runat="Server" Text="Submit" />
注意:添加ValidationGroup没有帮助:
<asp:ValidationSummary ID="ValidationSummary" runat="Server" ValidationGroup="All" ShowSummary="true" DisplayMode="BulletList" />
<asp:Label ID="lbl" AssociatedControlID="TextBox1" runat="Server" Text="Write into TextBox" />
<asp:TextBox ID="TextBox1" runat="Server" />
<asp:TextBox ID="TextBox2" runat="Server" />
<asp:RequiredFieldValidator ID="req1" runat="Server" ValidationGroup="All" ControlToValidate="TextBox1"
ErrorMessage="1st TextBox is Mandatory field" Text="<br>Please write something in 1st Box." />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="Server" ValidationGroup="All" ControlToValidate="TextBox2"
ErrorMessage="2nd TextBox is Mandatory field" Text="<br>Please write something in 2nd Box." />
<asp:CompareValidator ID="CompareValidator1" runat="Server" ValidationGroup="All" ControlToValidate="TextBox2"
ControlToCompare="TextBox1" Operator="Equal" Type="string" Text="Both textbox values should be same."
ErrorMessage="Both textbox values are not equal." Display="Dynamic" />
<asp:Button ID="SubmitButton" runat="Server" Text="Submit" ValidationGroup="All" />
任何?
答案 0 :(得分:0)
我能够重新创建的唯一方法是不按步骤3中的“提交”按钮。这会在ValidationSummary中留下“不正确”的文本,因为它仅在提交时更新 - 它不会通过Javascript实时更新。
您确定在第3步结束时按下了提交按钮(即发回帖)?
答案 1 :(得分:0)
这里有两个问题:
使用无效验证器的ErrorMessage属性列表填充ValidationSummary
正在验证的字段失去焦点时正在完成。
当表单实际尝试提交时,表示正在完成。
在这种特殊的形式中,asp:Button位于该行的末尾(感谢Jason Berkan注意到这一点;我希望我可以为他提供声望点!)。
现在,当您开始按下该按钮时,TextBox会失去焦点,因此:
由于按钮现在没有被正确点击(按下了按钮,但从未结束!),它无法提交表单,因此ValidationSummary未填充。
解决方案很简单:确保表单提交控件在单击时永远不会移动。
例如你可以通过:
<br />
标记<tr>
答案 2 :(得分:-2)
尝试将ValidationGroup添加到所有验证控件。它应该解决这个问题。