c# - .NET MVC Razor 动态表单生成

标签 c# asp.net forms asp.net-mvc-3

我在 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/

相关文章:

jquery - 寻找 JQuery 拖放功能

c# - MVVM + WCF 异步回调

c# - 在 byte[] (C#) 中搜索 Int32 的最快算法是什么?

c# - fancyBox 和 aspx C# 集成

php - WooCommerce 在另一个页面上丢失了密码表单

angular - Angular 6 中的输入验证无法收到错误

c# - 查询在 NHibernate 中出现超时错误,但在 SQL Server 中却没有

c# - 如何将表单置于请求帮助模式?

c# - 在 d3.js 中使用动态列表数据

c# - 在 .net 中存储 SQL 命令