2010-06-01 5 views
3

Предлагает ли ASP.NET MVC простой способ получить привязку модели к работе, если у вас есть классы моделей, которые наследуются от других?Моделирование привязки и производные классы моделей

В моем сценарии у меня есть вид, который строго типизирован для List<Person>.

У меня есть пара классов, которые наследуют от Person, а именно PersonTypeOne и PersonTypeTwo.

У меня есть три строго типизированных частичных вида с именами, которые соответствуют этим именам классов (и визуализуют элементы формы для свойств соответствующих моделей).

Это означает, что в моей основной Вид я могу иметь следующий код:

<% for(int i = 0; i < Model.Count; i++) 
    { 
     Html.RenderPartial(Model[i].GetType().Name, Model[i]); 
    } %> 

Это работает хорошо, за исключением, когда пользователь отправляет форму соответствующий метод действия контроллера только получает List<Person>, а не список Person, PersonTypeOne и PersonTypeTwo.

Это почти так же, как ожидалось, так как представление формы не содержит достаточной информации, чтобы сообщить связующемуся по умолчанию для создания любых экземпляров классови PersonTypeTwo.

Итак, есть ли способ получить такую ​​функциональность от стандартного связующего?

ответ

4

Вы должны просто создать отдельные модели для привязки к вашему входу. Ваши модели ViewModels и EditModels - это действительно разные обязанности и, следовательно, заслуживают своих собственных объектов.

+0

Вы утверждаете, что метод действия, получающий форму POST, должен принимать аргумент типа, который полностью отличается от тех, которые используются для строго типизированных представлений? –

+2

Да, это абсолютно то, что я говорю. Если вы подумаете об этом, ваша ViewModel, которая используется для рендеринга, будет иметь значения для выпадающего списка, возможно, текст, отформатированный специально для рендеринга, и всевозможные другие вещи потенциально. Модель, в которой выполняется ваше действие, должна иметь только точные свойства, которые должны быть привязаны, и любые релевантные утверждения. –

 Смежные вопросы

  • Нет связанных вопросов^_^