Допустим, у меня есть класс Food и класс BirdFood, производный от Food:
public class Food
{
...
}
public class BirdFood : Food
{
public int SeedCount { get; set; }
}
И, скажем, у меня есть класс Creature и класс Bird, производный от Creature
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" />
<% } %>
Хорошо, вот проблема.Когда модель представления получена в действии, свойство Creature имеет базовый класс Creature вместо производного типа Bird со свойством SeedCount производного типа BirdFood с параметрами post (из firebug), которые выглядят как Creature.Food.SeedCount 100
Хорошо, мои вопросы: как сохранить производные типы при связывании модели?Я подозреваю, что это имеет отношение к пользовательскому Биндеру Модели, но я не знаю, когда дело доходит до этого.Есть идеи?