对对象列表的 MVC 模型绑定问题进行故障排除
本文解决了 MVC 应用程序中的一个常见问题:模型绑定器无法从表单数据正确填充对象列表。 尽管表单提交看似正确,但症状是控制器操作中的空列表。
根本原因:缺少索引
核心问题在于表单元素缺乏索引。 如果没有索引,模型绑定器就无法区分列表中的各个元素。 例如,考虑这种情况:表单最初包含没有唯一标识符的元素。
<code><!-- Incorrect: Missing indices --></code>
解决方案:利用编辑器模板
解决方案涉及使用 EditorTemplates 自动生成正确索引的表单元素。这消除了手动索引并确保正确的模型绑定。
实施步骤:
创建 EditorTemplates 文件夹: 在 Views 文件夹中创建一个名为“EditorTemplates”的新文件夹。 此文件夹应与其他视图文件位于同一目录中。
创建强类型视图: 在 EditorTemplates 文件夹中,创建一个名称与您的模型类匹配的强类型视图文件(例如 PlanCompareViewModel.cshtml
)。
迁移部分视图内容:将 HTML 内容从原始部分视图移动到这个新创建的 EditorTemplate 中。
利用 EditorForModel()
: 修改您的父视图以使用 EditorForModel()
辅助方法。 该助手将根据您的模型自动渲染表单元素,并正确索引。
@model IEnumerable<plancompareviewmodel> @using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })) { <div> @Html.EditorForModel() </div> }
通过采用这种方法,模型绑定器将正确解释并填充控制器操作中的对象列表。 EditorForModel()
帮助器动态地为每个元素生成必要的索引,解决了绑定问题。
以上是为什么我的 MVC 模型绑定器无法从表单填充对象列表?的详细内容。更多信息请关注PHP中文网其他相关文章!