一个MVC表单上的多个表单,使用循环创建,只有第一个提交数据
我有以下代码,只有第一个表单提交任何内容,以下提交null值,每个模型都有数据。 如果我将其更改为一个大表单,则所有内容都会提交。 为什么其他个人forms会发布空值?
视图
@model myModel[] @for (int i = 0; i < Model.Length; i++) { using (Html.BeginForm("controllerAction", "Controller", FormMethod.Post, new { id="Form"+i })) { - @Html.TextBoxFor(a => a[i].property1) @Html.CheckBoxFor(a => a[i].property2) @Html.HiddenFor(a => a[i].property3)
} }
调节器
[HttpPost] public ActionResult controllerAction(myModel[] models) { ...do stuff... }
原因是您的for
循环中的索引器创建表单控件,而您的POST方法参数是myModel[] models
。
默认情况下, DefaultModelBinder
要求集合为零和连续,因此如果您尝试提交第二个表单,则返回[1].property1: someValue
等。因为索引器从1开始,绑定失败并且模型为null
。
您可以通过为模型绑定器使用的Index
属性添加隐藏输入来匹配非连续索引器来解决此问题
@Html.TextBoxFor(a => a[i].property1) @Html.CheckBoxFor(a => a[i].property2) @Html.HiddenFor(a => a[i].property3) // add this