And*_*rew 7 c# asp.net-mvc entity-framework model-binding asp.net-mvc-5
所以我有一个User对象集合,它应该是可批量编辑的(同时编辑许多用户).我正在使用Entity Framework将用户输入保存到数据库.
控制器方法从表单获取的集合为null.为什么?另外,BindAttribute是否可以与我的代码中的集合一起使用?
@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"/>
}
Run Code Online (Sandbox Code Playgroud)
[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");
}
Run Code Online (Sandbox Code Playgroud)
你需要使用一个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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3981 次 |
| 最近记录: |