我的控制器中的[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);
}
}
}
用户对象中的所有内容都在更新,除了用户角色,我无法找到问题,因为我正在调试并执行一步,我可以看到用户已分配了正确/更新的角色。
答案 0 :(得分:1)
我能够通过进行以下更改来解决此问题:
private void AddOrUpdateRoles(User user, ICollection<AssignedUserRole> assignedUserRoles)
{
foreach (var assignedRole in assignedUserRoles)
{
if (assignedRole.Assigned)
{
var userRole = context.UserRoles.Find(assignedRole.UserRoleId);
user.UserRoles.Add(userRole);
}
}
}
[HttpPost]
public ActionResult Edit(UserViewModel userViewModel)
{
if (ModelState.IsValid)
{
var user = userViewModel.User;
context.Entry(user).State = EntityState.Modified;
context.Entry(user).Collection(u => u.UserRoles).Load();
user.UserRoles.Clear();
AddOrUpdateRoles(user, userViewModel.UserRoles);
context.SaveChanges();
return RedirectToAction("Index");
}
return View(userViewModel);
}
我必须“加载”用户的用户名,否则清算无效。