我在 MVC 中构建一个站点,我传递给我的 View 的 View 模型包含一个自定义对象,该对象又包含一个 IEnumarable 自定义对象列表。
想法是 razor 将动态生成 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>
}
表单完美显示,包括数据注释,但 Controller 后置函数中的 IEnumerable 为空。
[HttpPost]
public virtual ActionResult Create(KpiCreateViewModel vm)
{
return this.RedirectToAction(MVC.Kpi.Index());
}
我在返回语句上设置了断点并检查了 vm 变量的内容。
谁能推荐一种检索表单数据的方法?
提前致谢
最佳答案
这是因为 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>
}
关于c# - .NET MVC Razor 动态表单生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428571/