此处的用例是将AutoPostBack设置为true的下拉列表,该列表会更新页面上的其他项目。但是,单击“提交”按钮时,同样的下拉列表也是ValidationGroup中必需项的一部分。
我们面临的问题是,当下拉列表发生更改时,会触发ValidatorOnChange,因此会在回发刷新页面之前短暂显示错误。
我们计划做的修复是删除下拉列表的ValidatorOnChange函数,但这看起来像是一个奇怪的黑客,所以我们想知道是否有人有任何其他建议。
这是一个非常简单的列表,用于演示问题:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void OnChange(object sender, EventArgs e)
{
updateList.Visible = test.SelectedValue == "1";
updateList2.Visible = test.SelectedValue == "2";
}
private void OnSubmit(object sender, EventArgs e)
{
if (Page.IsValid)
{
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList runat="server" ID="test" AutoPostBack="true" OnSelectedIndexChanged="OnChange">
<asp:ListItem Text="Test" Value="-1" />
<asp:ListItem Text="Test 1" Value="1" />
<asp:ListItem Text="Test 2" Value="2" />
<asp:ListItem Text="Test 3" Value="3" />
</asp:DropDownList>
<asp:RequiredFieldValidator ID="DropDownListValidator2" runat="server" ControlToValidate="test"
ErrorMessage="Please select" InitialValue="-1" ValidationGroup="testGroup" />
<asp:DropDownList runat="server" ID="updateList" Visible="false" />
<asp:DropDownList runat="server" ID="updateList2" Visible="false" />
<asp:Button runat="server" ID="testSubmit" Text="Submit" ValidationGroup="testGroup"
OnClick="OnSubmit" />
</div>
</form>
</body>
</html>
答案 0 :(得分:0)
以下jquery脚本块应该适合您。从Dropdownlist中选择项目时,使用ValidatorEnable()
禁用验证将会起到作用
这里我将更改处理程序与下拉列表的onchange客户端事件绑定
$("#<%=test.ClientID %>").change(function(){
ValidatorEnable(DropDownListValidator2, false);
});