ここでのユースケースは、AutoPostBackがtrueに設定されているページの他の項目を更新するドロップダウンリストです。ただし、同じドロップダウンリストは、送信ボタンがクリックされたときにValidationGroupの必須項目の一部です。CausesValidationがデフォルトでfalseであっても、DropDownListでASP.NET ValidatorOnChangeが発生します。
私たちが直面している問題は、ドロップダウンリストが変更されると、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>
ののonchangeクライアント側イベントに変更ハンドラをバインドしますが、また同じ – Devjosh
のためのマークアップを貼り付けることができますちょうどCausesValidationがデフォルトで真であるかもしれないという疑問がある場合には、ここではMSDNのドキュメントで、CausesValidationはデフォルトですべてのListControlでfalseになっています。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.causesvalidation.aspx – BlueFox