ASP.NET MVC3 связывается с подклассом - PullRequest
8 голосов
/ 20 июля 2011

У меня есть суперкласс типа Вопрос , который имеет несколько подклассов (например, MultipleChoiceQuestion и TextQuestion ).Каждый из подклассов имеет свои собственные шаблоны редактора (например, ~ / Shared / EditorTemplates / MultipleChoiceQuestion.cshtml ).

Что я хотел бы сделать, это создать список Вопрос объекты:

class Questionnaire {
    List<Question> Questions;
}

, которые действительно будут содержать экземпляры подклассов:

Questions.Add(new MultipleChoiceQuestion());
Questions.Add(new TextQuestion());

Затем я передаю вопросник в View, где я вызываю:

@Html.EditorFor(m => m.Questions)

Представление успешно отображает правильные шаблоны редактора для определенного подкласса Вопрос моделей.

Проблема заключается в том, что при отправке формы моя Анкета модель (который содержит список типа Вопрос ) содержит только экземпляры Вопрос , а не экземпляры подклассов.Кроме того, все экземпляры Вопрос свойства являются нулевыми.

В качестве теста я передал список типа MultipleChoiceQuestion , и он отлично работает:

class Questionnaire {
    List<MultipleChoiceQuestion> Questions;
}

Можно ли как-нибудь заставить HttpPost Action вернуть мою модель с подклассами, созданными с помощью данных моей формы?

Спасибо

1 Ответ

2 голосов
/ 20 июля 2011

Я думаю, что вы столкнулись с ограничением DefaultModelBinder. Чтобы решить эту проблему, вам нужно использовать связыватель модели клиента.

Вы можете найти этот пост полезное руководство; это говорит об этой конкретной проблеме.

...