.NET MVC Razor Динамическая генерация форм - PullRequest
5 голосов
/ 21 июня 2011

Я создаю сайт в MVC, и модель представления, которую я передаю моему представлению, содержит пользовательский объект, который, в свою очередь, содержит список пользовательских объектов IEnumarable.

Идея состоит в том, что бритва будет динамически генерировать форму для IEnumerable, которая может быть любым количеством объектов.

@foreach (var data in Model.Kpi.Values)
{
   <div class="editor-label">
       @Html.Label(data.Field.Name);
   </div>
   <div class="editor-field">
       @Html.EditorFor(model => data.Value)
       @Html.ValidationMessageFor(model => data.Value)
   </div>
}

Формы отлично отображаются, включая аннотации данных, однако IEnumerable равен нулю в пост-функции контроллера.

[HttpPost]
public virtual ActionResult Create(KpiCreateViewModel vm)
{
    return this.RedirectToAction(MVC.Kpi.Index());
}

Я поставил точку останова в операторе return и проверил содержимое переменной vm.

Кто-нибудь может предложить метод для извлечения данных формы?

Заранее спасибо

1 Ответ

2 голосов
/ 21 июня 2011

Это связано с тем, что у метода EditorFor недостаточно информации, чтобы сгенерировать имя, которое может использоваться DefaultModelBinder при повторной публикации. Посмотрите на атрибут имени, который генерируется в HTML. Имя генерируется из выражения, которое вы передаете, но вам не нужно указывать полный путь к свойству в цикле.

Измените его на индексированный цикл, и он должен работать.

@for(var i=0; i<Model.Kpi.Values.Count(); i++)
{
   <div class="editor-label">
       @Html.Label(model.Kpi.Values[i].Field.Name);
   </div>
   <div class="editor-field">
       @Html.EditorFor(model => model.Kpi.Values[i].Value)
       @Html.ValidationMessageFor(model => model.Kpi.Values[i].Value)
   </div>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...