0

コントローラーの [HttpPost] edit メソッドに問題があります。userrole に加えられた変更が保存されていません。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);
            }
        }
    }

userrole を除いて、User オブジェクトのすべてが更新されています。デバッグしてステップスルーを行っているため、問題を見つけることができず、ユーザーに正しい/更新されたロールが割り当てられていることがわかります。

4

1 に答える 1