C# MVC中模型绑定期间属性上的KnownType属性?
假设我有一类食物和一类源自食物的鸟食:C# MVC中模型绑定期间属性上的KnownType属性?,c#,asp.net,asp.net-mvc,asp.net-mvc-3,c#-4.0,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,C# 4.0,假设我有一类食物和一类源自食物的鸟食: public class Food { ... } public class BirdFood : Food { public int SeedCount { get; set; } } 让我们假设我有一个类生物和一个类鸟,它来自于这个类生物 public class Creature { public Food Food { get; set; } } public class Bird : Creature { ...
public class Food
{
...
}
public class BirdFood : Food
{
public int SeedCount { get; set; }
}
让我们假设我有一个类生物和一个类鸟,它来自于这个类生物
public class Creature
{
public Food Food { get; set; }
}
public class Bird : Creature
{
...
}
最后,假设我有一个生物视图模型:
public class ViewModel
{
public Creature Creature { get; set; }
}
创建Bird实例时,我还创建BirdFood实例并将其指定给Food属性,然后将视图模型传递给视图。很简单
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" />
<% } %>
好吧,问题来了。当在动作中接收到视图模型时,生物属性是基类生物,而不是派生类型的Bird,其SeedCount属性是派生类型BirdFood,其post参数(来自firebug)类似于biot.Food.SeedCount 100
好的,我的问题是,当绑定模型时,如何保留派生类型?我怀疑这与一个定制的模型活页夹有关,但我对此一无所知。有什么想法吗?默认的模型绑定器只是检查视图模型中的类型并使用这些类。他猜不出您想要某个派生类。A可以用来提供这样的提示。这是。摇滚乐。我们希望有一个更简单、更自然的解决方案,但这将完成这项工作。