更新パネルに CheckBoxList があります。CheckBoxList は、テーブルからフィルター処理された情報を表示します。フィルターは、ドロップダウンリストで選択された値に基づいています。CheckBoxList の追加 更新パネル内にもチェックボックスがあります。その機能は、ワンクリックですべての CheckBoxList 項目をチェックまたはチェック解除することです。
CheckBoxList に多くの要素 (数千の項目) があり、チェックボックスをクリックして CheckBoxList の項目を 1 回オフにすると、次のエラーが発生する場合を除き、すべて正常に動作します。
Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500
このエラーは、ScriptResource.axd の 1 つで発生します。
エラーを再現する簡易版を添付します。
ページ テスト.aspx:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlModelos" runat="server" AutoPostBack="True"
DataSourceID="odsModelos" DataTextField="nomb_modelo"
DataValueField="id_modelo">
</asp:DropDownList>
<asp:ObjectDataSource ID="odsModelos" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetModelosHActivos"
TypeName="GlobalDB.DAL.DSGlobalDBTableAdapters.HMModelosTableAdapter">
<SelectParameters>
<asp:Parameter DefaultValue="True" Name="activo" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
<br />
<asp:CheckBox ID="chbMarcar" runat="server" AutoPostBack="True"
oncheckedchanged="chbMarcar_CheckedChanged" Text="Select All" />
<asp:CheckBoxList ID="chblSegmentos" runat="server" DataSourceID="odsSegmentos"
DataTextField="descripcion" DataValueField="id">
</asp:CheckBoxList>
<asp:ObjectDataSource ID="odsSegmentos" runat="server"
OldValuesParameterFormatString="{0}"
SelectMethod="GetHMDistribucionSegmentos"
TypeName="GlobalDB.DAL.DSGlobalDBTableAdapters.HMSegmentosTableAdapter">
<SelectParameters>
<asp:ControlParameter ControlID="ddlModelos" DefaultValue="0" Name="id_modelo"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlModelos"
EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
背後にあるコードは次のとおりです。
protected void chbMarcar_CheckedChanged(object sender, EventArgs e)
{
foreach (ListItem item in chblSegmentos.Items)
item.Selected = chbMarcar.Checked;
}
実際のページにはこのような要素がたくさんあります。したがって、Viewstate は優れています。すべてのテストで、このエラーは、前述の CheckBoxList に数千の項目がある場合にのみ発生することが示されました。それ以外の場合、エラーは発生しません。
このエラーを修正する方法がわかりません。私はこのような構成を配置しようとしました:
<pages enableEventValidation="false" maxPageStateFieldLength="30000" />
<httpRuntime maxRequestLength="40480"/>