私はここで何か信じられないほど紛らわしいことはないが、モデルバインダーがコレクションから継承するビューモデルを常にバインドするのに何らかの理由があるのだろうか?MVC3剃刀モデルのバインダーと継承されたコレクション
私はページリストを表示し、コンボボックスを表示し、その上にボタンを追加したいとします(単純なリストを扱う)。その後、
public class PagedList<T> : List<T>
{
public int TotalCount { get; set; }
}
とビューのように見えるモデル::だからビューで
public class MyViewModel : PagedList<ConcreteModel>
{
public IEnumerable<ChildModel> List { get; set; }
public int? SelectedChildModelId { get; set; }
}
(レイザー):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(model => model.SelectedChildModelId, new SelectList(Model.List, "ChildModelId", "DisplayName"))
}
とコントローラHttpPost行動を伴ったクラスは、次のようになります。
public ActionResult(MyViewModel viewModel)
{
...
}
上記はc ActionResultのviewModelをnullにする。それについて論理的な説明はありますか?コレクションから継承したモデルを表示することだけが具体的であると私は言うことができます。
私はカスタムバインダーでそれを回すことができますが、関連するプロパティはプリミティブ型であり、ジェネリックまたは継承もありません。
コレクションの継承された型をプロパティとして持つようにビューモデルを修正し、問題を修正しました。しかし、私はバインダーがそれに壊れている理由を私の頭をまだ傷つけています。建設的な考えは高く評価されました。
これまで、コレクション継承型のプロパティを宣言しているビューモデルではなく、他の実行可能な解決策が見つからなかったため、継承したビューモデルを使用しました。私がこのアプローチで持っている唯一の問題は、オートマップの代わりにプロパティを明示的に設定する必要があるため、AutoMapperの作業が複雑になることです。 –
[Stack Overlow]の回答(http://stackoverflow.com/questions/5762302/why-cant-my-views-model-bind-with-my-generic-viewmodel-which-implements-an-inte)が見えます有望。うーん、共変量 - 前にそれを使用したことはありません –