.NET MVC Razor动态表单生成

JCo*_*ine 5 c# forms asp.net asp.net-mvc-3

我正在MVC中构建一个站点,我传递给我的View的View Model包含一个自定义对象,该对象又包含一个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>
}
Run Code Online (Sandbox Code Playgroud)

表单显示完美,包括数据注释,但IEnumerable在控制器post函数中为null.

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

我在return语句上加了一个断点,并检查了vm变量的内容.

任何人都可以建议一种方法来检索表单数据?

提前致谢

Tim*_*ers 4

这是因为该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>
}
Run Code Online (Sandbox Code Playgroud)