首先,我想说我做了很多研究,尝试了很多方法,但没有一个有效。我想避免:
我的模型类看起来像这样:
public class ListViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsChecked { get; set; }
}
我将它作为IEnumerable集合传递给视图。 我正在尝试将所有表单数据打包到IEnumerable中,比如这里
[HttpPost]
[Authorize(Roles = "User")]
public ActionResult EditVisitLists(List<ListViewModel> model)
{
//...
}
不幸的是,我的每一次尝试都失败了,我收到null作为模型(可能是模型绑定器不能像我希望的那样识别表单)
这是我的最新尝试:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(m => item.Name)
</td>
<td>
@Html.CheckBoxFor(m => item.IsChecked, new { id = "[" + item.Id + "].Name" })
@Html.HiddenFor(m => item.Name)
</td>
</tr>
}
答案 0 :(得分:1)
只需使用for
循环代替foreach
即可获得正确的绑定
@for (var i = 0; i < Model.Count; i++) {
@Html.Displayfor(m => Model[i].Name
@Html.CheckBoxFor(m => Model[i].IsChecked)
@Html.HiddenFor(m => Model[i].Name)
}
查看生成的html,您现在将拥有不同的name
和id
属性,这些属性应该可以正常绑定。