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