Атрибут KnownType для свойства во время привязки модели в MVC? - PullRequest
1 голос
/ 28 сентября 2011

Допустим, у меня есть класс 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

enter image description here

Хорошо, мои вопросы: как сохранить производные типы при связывании модели?Я подозреваю, что это имеет отношение к пользовательскому Биндеру Модели, но я не знаю, когда дело доходит до этого.Есть идеи?

1 Ответ

2 голосов
/ 28 сентября 2011

Связыватель модели по умолчанию просто проверяет типы в вашей модели представления и использует эти классы.Он не может догадаться, что вы хотите какой-то производный класс.* Подсказка пользовательской модели может использоваться для предоставления такой подсказки.А вот еще один .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...