我的控制器中的 [HttpPost] 编辑方法有问题,它没有保存对用户角色所做的更改,这很奇怪,因为 create 方法正在工作,它使用相同的辅助方法,这是我的代码:
视图模型:
public class UserViewModel
{
public User User { get; set; }
public virtual ICollection<AssignedUserRole> UserRoles { get; set; }
public virtual List<Company> Companies { get; set; }
}
控制器:
[HttpPost]
public ActionResult Edit(UserViewModel userViewModel)
{
if (ModelState.IsValid)
{
var user = userViewModel.User;
user.UserRoles.Clear();
AddOrUpdateRoles(user, userViewModel.UserRoles);
context.Entry(user).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("Index");
}
return View(userViewModel);
}
辅助方法
private void AddOrUpdateRoles(User user, ICollection<AssignedUserRole> assignedUserRoles)
{
foreach (var assignedRole in assignedUserRoles)
{
if (assignedRole.Assigned)
{
var userRole = new UserRole { Id = assignedRole.UserRoleId };
context.UserRoles.Attach(userRole);
user.UserRoles.Add(userRole);
}
}
}
用户对象中的所有内容都在更新,除了用户角色,我在调试和逐步执行时找不到问题,我可以看到用户分配了正确/更新的角色。