我有一个CustomValidator
位于Wizard
控件内部的UpdatePanel
.
没有UpdatePanel
,一切都按预期工作,但只有在UpdatePanel
添加 后,IE9 中的事情才会变得奇怪。
在向导的一个步骤中,我有一个GridView
通过搜索填充的,所有这些都可以正常工作。
<asp:CustomValidator ID="cvSelectedUser" runat="server"
CssClass="Validator"
ErrorMessage="You must select a user to alter before you may continue"
OnServerValidate="cvSelectedUser_ServerValidate">
</asp:CustomValidator>
<asp:Panel ID="pSearchExisting" runat="server"
Height="120px"
ScrollBars="Vertical">
<asp:GridView ID="gvSearchExisting" runat="server"
AutoGenerateColumns="false"
DataKeyNames="UniqueID"
EmptyDataText="No users found from your search."
Width="95%">
<AlternatingRowStyle CssClass="GridViewAlternatingRow" />
<HeaderStyle CssClass="GridViewHeader" />
<SelectedRowStyle CssClass="GridViewSelectedRow" />
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" SortExpression="EmployeeID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="UserID" HeaderText="User ID" SortExpression="UserID" />
</Columns>
</asp:GridView>
</asp:Panel>
CustomValidator
用于确保用户在继续之前选择了搜索结果,并且仅在用户不选择时阻止用户进入下一个向导步骤。
protected void cvSelectedUser_ServerValidate(object sender, ServerValidateEventArgs e)
{
e.IsValid = true;
if (gvSearchExisting.SelectedIndex == -1)
e.IsValid = false;
}
这在向导事件中得到证实。
protected void wUserID_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
if (Page.IsValid == false)
return;
// process navigation
}
在 IE9(仅)中发生的奇怪事情是,如果您单击向导上的 Next 按钮并且您没有从 中选择记录GridView
,它会阻止您进行下一步,但CustomValidator
不会显示错误消息.
用户可以继续点击下一步并且错误消息不显示。但是,奇怪的是,如果您单击页面,失去 Next 按钮的焦点,然后再次单击 Next 按钮,则会显示错误消息。
更麻烦的是,这在 Chrome、Firefox、IE8 等中按预期工作,但不是 IE9。
作为回顾
IE9 中不显示错误信息
- 不要选择用户
- 根据需要多次单击“下一步”按钮
- 没有消息显示
IE9 中确实显示错误消息
- 不要选择用户
- 单击下一步按钮
- 取消下一步按钮的焦点(单击页面上的其他位置,例如背景上的空白)
- 再次单击下一步按钮
- 显示消息
关于如何解决这个问题的任何想法?
我确实通过https://stackoverflow.com/a/12926317/935779找到了一个看起来像是 hack 的变通方法。这只是强制 IE9 进入兼容模式。我宁愿一个适当的修复。
<meta http-equiv="X-UA-Compatible" content="IE=IE8" />