[英]ASP.NET: CompareValidator and ValidationSummary
我有一个CompareValidator和ValidationSummary奇怪的行为。
例如,下面的.aspx文件(后面没有相关的C#代码,因此只需将下面的代码放在新的.aspx文件中,即可运行并观察其行为)。
这些(改进的)步骤:
这些步骤的结果略有不同,因为焦点更改是通过键盘进行的:
为什么您需要对“提交”按钮执行两个操作(一个操作使其聚焦,一个操作单击它)以更新ValidationSummarry?
(比较的旧步骤:1.在两个文本框中均不输入任何内容,然后按SubmitButton 2.现在,您将在验证摘要中获得一个项目符号列表,并在SubmitButton前面获得两行验证行。3.现在,在TextBox1中输入“ foo”,然后在TextBox2中单击“栏”,然后按SubmitButton4。现在将两个项目保留在项目符号列表中,并且“两个文本框值应相同。”在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" />
任何人?
我能够重新创建的唯一方法是不按步骤3中的“提交”按钮。 这会使您在ValidationSummary中留下“不正确”的文本,因为仅在提交时才会更新-Java不会实时更新。
您确定要在步骤3的最后按“提交”按钮(即发生回发)吗?
这里有两个问题:
用无效验证程序的ErrorMessage属性列表填充ValidationSummary
正在验证的字段失去焦点时正在完成。
当表单实际尝试提交自己时完成。
在这种特殊形式中,asp:Button位于行尾(感谢Jason Berkan注意到了这一点;我希望我能为此给他声誉点!)。
现在,当您开始按下该按钮时,文本框将失去焦点,从而:
由于现在未正确单击按钮(按下开始,但从未结束!),因此无法提交表单,因此未填写ValidationSummary。
解决方案很简单:确保表单提交控件在单击时永远不会移动。
例如,您可以通过以下方式对此:
<br />
标签 <tr>
尝试将ValidationGroup添加到所有验证控件。 它应该解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.