2013-03-05 3 views
2

У меня есть следующий код на моем взгляде:Html.EditorFor дочерний объект в MVC4?

@foreach (var parent in Model.Parents) 
     {  
      @foreach (var child in parent.Children) 
       { 

       @Html.TextAreaFor(c => child.name) 

       }     
     } 

Других прокручиваемые в виде сохраняемых в порядке, но когда отправить форму, метод POST в моем контроллере получает ViewModel с полем нулевых родителей. Любая идея почему?

ответ

6

Вы не можете использовать цикл foreach, если хотите, чтобы коллекции связывались. Вы должны использовать for петли:

@for (int i = 0; i < Model.Parents.Count; i++) { 
    @for (int j = 0; j < Model.Parents[i].Children.Count; j++) { 
     @Html.TextAreaFor(x => x.Parents[i].Children[j].name) 
    } 
} 

В качестве альтернативы можно использовать редактор шаблонов для родителей (и даже другой для детей). Для этого потребуется вам при создании шаблона для модели Родитель и положить его в папку EditorTemplates, то называть это так:

@Html.EditorFor(x => x.Parents) 

MVC будет заботиться о Перечисления и обязательным. То же самое можно было бы сделать и для списка «Дети».

Вот MVC учебник по их использованию (я не смог найти версию mvc4): http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

+0

Спасибо Саймона. Я получаю сообщение об ошибке, потому что дети - это ICollection, и все, что у меня есть, это родители в моем представленииModel. Любая идея, как я могу «ToList» все в родителях или каким-то образом разрешить это? – RobVious

+0

Любое изменение в IList или использование шаблонов редактора. Шаблоны редакторов отлично работают с IEnumerables. Проверьте этот ответ за идею использования: http://stackoverflow.com/questions/4652457/asp-net-mvc-problem-with-editortemplate-for-icollectiont-mapped-to-enum?answertab=votes#tab-top –

+0

Мне нужно было бы использовать два шаблона, верно? Один для родителей, один для ребенка? – RobVious

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

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