0

更新パネルに 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"/>
4

2 に答える 2

1

かなり前に、ネストされた更新パネルで数百の ASP.Net チャート コントロールをレンダリングしようとして同様の問題が発生しました。その結果、Javascript エラーが発生し、IE8 では「メモリ不足」エラーが発生しました。

私たちが見つけた唯一の許容できる解決策は、ページに表示されるコントロールの数を減らすことでした。

幸運を、

ダレン

于 2013-08-15T06:12:36.197 に答える