2

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

ユーザーがポストバックをトリガーするドロップダウンリストの値を切り替えると、正しいコントロールをページに動的にロードしたいと考えています。これは各コントロールの最初のロードで機能しますが、(2 番目のコントロールをロードした後に) 最初のコントロールをリロードしようとすると、次のエラーが発生します。

ビューステートの読み込みに失敗しました。ビューステートが読み込まれるコントロール ツリーは、前の要求でビューステートを保存するために使用されたコントロール ツリーと一致する必要があります。たとえば、コントロールを動的に追加する場合、ポストバック中に追加されたコントロールは、最初のリクエスト中に追加されたコントロールのタイプと位置と一致する必要があります。

また、2 番目のコントロールの初期ロード時に、データ バインディングが正しいコントロールにバインドされない奇妙な動作が見られます (たとえば、コントロールのテキスト ボックスではなくボタンのテキストを設定します)。

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

4

1 に答える 1

1

上記のコメントにはすばらしい提案がありましたが、最終的に正しい解決策を示したのは、この質問に対する Joel Coehoorn の回答でした。

コントロール OnInit をロードし、SelectionChangedイベントで OnInit の変更を吹き飛ばし、必要に応じて正しいコントロールを再作成します。未使用のコントロールを非表示にすることに関する追加の提案をありがとう。今後の参考にさせていただきます。

于 2012-04-16T17:32:40.380 に答える