0

我的控制器中的 [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);
            }
        }
    }

用户对象中的所有内容都在更新,除了用户角色,我在调试和逐步执行时找不到问题,我可以看到用户分配了正确/更新的角色。

4

1 回答 1

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);
    }

我必须“加载”用户的用户角色,否则清算什么也不做。

于 2013-03-01T20:49:58.517 回答