我有一个实体模型,它具有为应用程序注册的用户的集合属性(多对多关系)。
在编辑视图中,我使用隐式模型绑定来编辑具有单个属性(Title
,DueDate
等...)和Users
(复选框)的任务对象:
public ActionResult Edit([Bind(Include = "Id,Title,Description,DueDate,Status")] UserTask task, string[] asndUsers/*users IDs*/)
{
if (ModelState.IsValid)
{
task.Users = new List<ApplicationUser>();
if (asndUsers != null)
{
foreach (var userId in asndUsers)
{
var user = context.Users.Find(userId);
task.Users.Add(user);
}
}
context.Entry(task).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("Index");
}
return View(task);
}
但这不起作用,单个属性已更新,但用户无法更新。
然后我使用了显式模型绑定
var task = context.Tasks.Include(t => t.Users).SingleOrDefault(s => s.Id == id);
task.Users = new List<ApplicationUser>();
foreach (var userId in asndUsers)
{
var user = context.Users.Single(u => u.Id == userId);
task.Users.Add(user);
}
if (TryUpdateModel(task, "", new string[] { "Title", "Description", "DueDate", "Status" }))
{
context.SaveChanges();
return RedirectToAction("Index");
}
它有效,但不知道隐式绑定没有做什么