数日前にこの質問の背景を投稿しました..しかし、答えはまだ不完全であるため、要約を付けて再投稿します。
オブジェクトの複数のカテゴリの詳細が格納されている MVC 3 Razor Web アプリを開発しています。(車両、住宅、楽器など) . すべてのオブジェクトは、いくつかの共通データ (タイトル、説明など) と、それが属するカテゴリに固有の詳細を共有します。カテゴリ リストは拡大することが予想され、保守性を低下させることを考慮して、同じ [オブジェクトの追加] ウィザードを再利用したいと考えています。ウィザードは、次の実装に基づいています。
http://afana.me/post/create-wizard-in-aspnet-mvc-3.aspx
複数ステップのウィザード プロセスでは、最後のステップで、ユーザーはカテゴリ固有の詳細 (車両のモデル、メーカー、VIN など) を入力できます。ビュー ページは、次のように定義される「AssetView」モデルにバインドされます。
public class AssetView
{
[Required]
public string Title { get; set; }
[Required]
public string Description { get; set;}
public SpecificAsset AssetDetails { get; set; }
}
AssetDetails プロパティは、前の段階で選択されたカテゴリ タイプに従って実行時に動的に変更されます。ビューは次のようになります
@model AssetView
....
<div class="wizard-step">
...
</div>
<div class="wizard-step">
...
</div>
<div class="wizard-step">
@Html.EditorFor(model => model.AssetDetails)
</div>
コントローラで、カテゴリの選択に基づいて。次のようにアセットの詳細を初期化します
_thisAsset.AssetDetails = new MotorAsset();
次に、タイプ固有のエディター テンプレートでビューをオーバーライドします。
ウィザードは正常に動作しますが、コントローラーの保存ステップで、「AssetDetails」プロパティに値がなく、基本タイプである「SpecificAsset」タイプであることが示されます。特定のタイプにもキャストできません。ただし、formsCollection にはすべての値が表示されます。「Transmission」、「Make」などの「AssetDetails」固有のプロパティは、「AssetDetails_」で始まるフォーム コレクションにあります。
コントローラーの保存ステップで 20 種類以上の特定のカテゴリ (モーター、ハウスなど) を処理する必要があることを念頭に置いて、何らかのハックなしでこれを行うにはどうすればよいですか?