0

私は ASP.NET の初心者ですが、他の人が作成したアプリケーションのバグを修正しようとしています: ドロップダウン リストの選択がポストバック間で保持されません。

コードの関連部分は次のとおりです。

<asp:DataList ... OnItemDataBound="PopulateDropDownList">
    ...
    <FooterTemplate>
        <asp:DropDownList ... AutoPostBack="true" OnSelectedIndexChanged="DoSomething"/> 
    </FooterTemplate>                               
</asp:DataList>

現在の選択内容をセッション、静的変数、または別の場所に保存できると思いますが、これは解決策というよりは回避策のようです。

4

4 に答える 4

1

通常、以下のように、EnableViewState を「true」に設定できます。

<asp:DropDownList ... EnableViewState="true" ...>
</asp:DropDownList>`

しかし、DataList 内で同じように機能するかどうかは 100% わかりませんが、そうすべきだと思います。

ビュー ステートの詳細については、「ASP.NET ビュー ステートについて」を参照してください。

絶対に必要なコントロールに対してのみ ViewState を有効にしてください。そうしないと、メモリの問題が発生します。上記のソースから(強調鉱山):

EnableViewState プロパティは System.Web.UI.Control クラスで定義されるため、Page クラスを含むすべてのサーバー コントロールがこのプロパティを持ちます。したがって、Page クラスの EnableViewState を False に設定することで、ページ全体のビュー ステートを保存する必要がないことを示すことができます。(これは、分離コード クラスで Page.EnableViewState = false; または @Page レベルのディレクティブ - <%@Page EnableViewState="False" %> として実行できます。

于 2013-01-08T01:31:22.770 に答える
0

まず、ページの表示状態がTrueまたはFalseに設定されていることを確認します。EnableViewState = "true"を含めると、ここでの目的に確実に役立ちます。セッションなどで選択を保存する必要はありません。

于 2013-01-08T01:48:36.463 に答える
0

同僚は、現在のリクエストがポストバックであったとしても、Page_Loadメソッドが を再バインドしていることを指摘しました。DataListこの問題はDataList、リクエストがポストバックでない場合にのみデータをバインドするように変更することで解決されました。

これが問題の根本原因のようですので、これが最善の解決策だと思います。

于 2013-01-09T21:43:07.550 に答える
0

Initコード ビハインドでは、イベントではなくページのイベントでデータ バインディングを実行するとLoad、問題が回避されます。ただし、これの欠点は、一部のコントロール値が の間に入力されないことInitです。

于 2013-01-08T03:08:42.277 に答える