2012-04-16 6 views
2

私は、ユーザーの好みに応じてEmployeeStation CRUDタスクの両方を処理するページを設計しようとしています。私はUserControlをサブクラス化してEditEntityControlを作成し、この基本クラスから派生した2つのカスタムコントロールを開発し、それぞれEmployeeまたはStationオブジェクトのCRUDアクティビティを処理します。ポストバック中に動的にロードされるコントロールを変更します

ユーザーがポストバックをトリガーするドロップダウンリストの値を切り替えると、正しいコントロールをページに動的にロードする必要があります。これは、各コントロールの最初の負荷で動作しますが、私は(第2のロード後)最初のコントロールを再ロードしようとすると、私は次のエラーを取得する:

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

私も初期の負荷にいくつかの奇妙な行動を参照してくださいデータバインディングが正しいコントロール(コントロールのテキストボックスではなくボタンのテキストを設定するなど)にバインドされない2番目のコントロールです。

このシナリオを処理する方法はありますか?または、ViewStateをクリアしてこのエラーを回避するためにページ全体を再リクエストする方法はありますか?これは、私がこのViewState PostBacks間の混乱/混乱を解消できれば、他のすべてが設計どおりに動作しているようです。

+0

ViewStateが必要ない場合は、コントロールまたはベースコントロールで 'EnableViewState'をfalseに設定してみましたか? –

+0

しかし私はいくつかのPostBacksで 'ViewState'が必要です。これらは入力フォームなので、ユーザーがフォームの1つでsubmitをクリックすると、そのインスタンスに 'ViewState'が必要になり、値をデータベースに保持します。私は2番目の入力コントロールが要求されている場合に 'ViewState'をクリアしたいだけです。 –

+1

まず、数値が予測可能な場合は、UserControlの表示を切り替える方がよいでしょう。表示されないコントロールはレンダリングされないため、パフォーマンスは引数ではありません。それとは別に、ページのライフサイクルのどこで、どのようにこれらのコントロールをロードしているのかを示す必要があります。 page_loadの後にコントロールを動的に追加することはできますが、**後で**コントロールを再作成することはできません(fe。イベントアンドラーで)。それらに静的IDを割り当てましたか?どのように作成されますか? –

答えて

0

上記のコメントに大きな示唆がありましたが、最終的に私が正しい解決策を指摘したのはJoel Coehoornの回答this questionです。

コントロールOnInitをロードし、その後、OnInitの変更を吹き飛ばし、必要に応じて正しいコントロールを再作成します。未使用のコントロールを見えなくするための追加の提案をありがとう。私は将来の参照のためにそれを念頭に置いています。

関連する問題