假设我有食物类和一类源自食物的BirdFood:
public class Food
{
...
}
public class BirdFood : Food
{
public int SeedCount { get; set; }
}
让我说我有一个类Creature和一个源自Creature的类Bird
public class Creature
{
public Food Food { get; set; }
}
public class Bird : Creature
{
...
}
最后,假设我有一个生物视图模型:
public class ViewModel
{
public Creature Creature { get; set; }
}
当我创建Bird的实例时,我还创建了一个BirdFood实例并将其分配给Food属性并将视图模型传递给View。很简单。
public ActionResult Index()
{
ViewModel viewModel = new ViewModel();
viewModel.Creature = new Bird();
viewModel.Creature.Food = new BirdFood() { SeedCount = 100 } ;
return View(viewModel);
}
观点:
<% using(Html.BeginForm("Save", "Home", FormMethod.Post))
{ %>
<%: Html.Hidden("Creature.Food.SeedCount", (Model.Creature.Food as MvcApplication6.Controllers.BirdFood).SeedCount) %>
<input type="submit" />
<% } %>
好的,这是问题所在。当在Action中接收到视图模型时,Creature属性是基类Creature,而不是派生类型Bird,派生类型BirdFood的SeedCount属性带有post参数(来自firebug),看起来像Creature.Food.SeedCount 100
好的,我的问题是,当模型绑定时如何保留派生类型?我怀疑它与自定义Model Binder有关,但是当谈到它时我很无能为力。有什么想法吗?
答案 0 :(得分:2)
默认模型绑定器只检查视图模型中的类型并使用这些类。他猜不出你想要一些派生类。可以使用custom model binder来提供此类提示。这是another one。