所以我有一个用户对象的集合,它应该是可批量编辑的(同时编辑许多用户)。我使用实体框架将用户输入保存到数据库中。
控制器方法从表单获取的集合为 null。为什么?
另外,BindAttribute 是否可以像我的代码中那样与集合一起使用?
View:
@model IEnumerable<Domain.User>
@using (Html.BeginForm("UpdateUsers", "Users"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
foreach (var item in Model)
{
@Html.HiddenFor(modelItem => item.Id)
@Html.EditorFor(modelItem => item.FirstName)
@Html.ValidationMessageFor(model => item.FirstName)
@Html.EditorFor(modelItem => item.LastName)
@Html.ValidationMessageFor(model => item.LastName)
@Html.EditorFor(modelItem => item.Birth)
@Html.ValidationMessageFor(model => item.Birth)
}
<input type="submit" value="Update user data"/>
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateUsers([Bind(Include = "Id,FirstName,LastName,Birth")] IEnumerable<User> users)
{
if (ModelState.IsValid)
{
foreach (User u in users)
{
db.Entry(u).State = EntityState.Modified;
}
db.SaveChanges();
}
return RedirectToAction("EditUsers");
}
你需要用一个索引你的集合for
而不是一个foreach
为了让 ModelBinder 能够拾取它:
for (var i = 0 ; i < Model.Count(); i++)
{
@Html.HiddenFor(modelItem => modelItem[i].Id)
@Html.EditorFor(modelItem => modelItem[i].FirstName)
@Html.ValidationMessageFor(modelItem => modelItem[i].FirstName)
@Html.EditorFor(modelItem => modelItem[i].LastName)
@Html.ValidationMessageFor(modelItem => modelItem[i].LastName)
@Html.EditorFor(modelItem => modelItem[i].Birth)
@Html.ValidationMessageFor(modelItem => modelItem[i].Birth)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)