繁体   English   中英

.NET MVC Razor动态表单生成

[英].NET MVC Razor Dynamic Form Generation

我正在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>
}

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

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

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

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

提前致谢

这是因为EditorFor方法没有足够的信息来生成一个名称,当您回发时, DefaultModelBinder可以使用该名称。 查看HTML中生成的name属性。 该名称是从您传入的表达式生成的,但您不必在循环中使用该属性的完整路径。

将它更改为索引循环,它应该工作。

@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>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM