在MVC应用程序中,包含对象列表的表单无法正确将列表提交到控制器。提交表单后,控制器接收到的对象列表为空。
问题源于表单元素中缺少列表项的索引。模型绑定器需要索引来区分列表中的元素。
为了解决这个问题,请使用模板而不是局部视图。
1. 创建编辑器模板
在视图文件夹下的“EditorTemplates”文件夹中,创建一个名为“PlanCompareViewModel.cshtml”的编辑器模板。将以下代码放入模板中:
<code>@model PlanCompareViewModel <div> @Html.HiddenFor(p => p.PlanID) @Html.HiddenFor(p => p.CurrentPlan) @Html.CheckBoxFor(p => p.ShouldCompare) </div></code>
2. 修改父视图
按如下方式更新父视图:
<code>@model IEnumerable<plancompareviewmodel> @using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })) { <div> @Html.EditorForModel() </div> }</code>
DisplayTemplates和EditorTemplates会自动为集合处理索引,确保模型绑定器创建正确的对象列表。
以上是为什么我的 MVC 表单无法发布对象列表?的详细内容。更多信息请关注PHP中文网其他相关文章!