请改用列表,然后将
foreach循环替换为
for循环:
@model IList<BlockedIPViewModel>@using (Html.BeginForm()) { @Html.AntiForgeryToken() @for (var i = 0; i < Model.Count; i++) { <tr> <td> @Html.HiddenFor(x => x[i].IP) @Html.CheckBoxFor(x => x[i].Checked) </td> <td> @Html.DisplayFor(x => x[i].IP) </td> </tr> } <div> <input type="submit" value="Unblock IPs" /> </div>}或者,您可以使用编辑器模板:
@model IEnumerable<BlockedIPViewModel>@using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.EditorForModel() <div> <input type="submit" value="Unblock IPs" /> </div>}然后定义
~/Views/Shared/EditorTemplates/BlockedIPViewModel.cshtml将为集合的每个元素自动呈现的模板:
@model BlockedIPViewModel<tr> <td> @Html.HiddenFor(x => x.IP) @Html.CheckBoxFor(x => x.Checked) </td> <td> @Html.DisplayFor(x => x.IP) </td></tr>
您在控制器中获得null的原因是因为您不遵守默认模型绑定程序希望成功绑定到列表的输入字段的命名约定。我邀请你阅读
followingarticle。
阅读完后,请结合我的示例和您的示例查看生成的HTML(更具体地说是输入字段的名称)。然后进行比较,您将了解为什么您的列表不起作用。



