0

ASP.NET MVC 4 Web アプリケーションで、ウィザード スタイルのマルチステップ プロセスを構築しています。ウィザードは厳密には直線的ではないため、TempData を使用して以前の手順の情報を保持しています。最初のページでユーザーが選択した結果、実際には 3 番目のページで 3 つのオプションのいずれかが表示されます。3 番目のページのビューモデルの基本クラス プロパティに 3 つの派生クラスのいずれかを割り当てるという選択を使用して、これを実現しています。次に、ページ自体がカスタム モデル バインダーを使用@Html.EditorFor(m => m.BaseContainer)して、ユーザーが入力する正しいテンプレートを使用および表示できるようにします。私の問題は、3 番目のページが POST に戻ったときに、コントローラー メソッドがもちろん基本クラスを期待していることです。つまり、TempData に保存すると、基本クラスのプロパティのみが保存されます。

の行に沿って一連のチェックを行うことができましたがif (viewModel.BaseContainer is DerivedClass1)、それはハックのようです。基本クラスを使用する際の抽象化の全体的なポイントは、コントローラーがこの時点でどれであるかを知る必要がないということです。派生クラスのプロパティを失わずにオブジェクトを保存するよりエレガントな方法はありますか?

4

1 に答える 1

0

数か月前に同じ問題に取り組みました。ウィザードの各ステップで小さなビュー モデルを使用して問題を解決し、検証が成功したら、値を大きなビュー モデル (ウィザードのすべてのプロパティを含む) にコピーしました。次に、このビッグ ビュー モデルを に保存TempDataし、次のステップに進みました。

基本クラスから派生するときに新しいプロパティを追加し、そのインターフェイスを拡張する場合、派生クラスごとに新しいプロパティ用の追加のインターフェイスを作成できますが、これは単純な解決策のようには思えません。

于 2013-02-21T10:45:15.843 に答える