コントローラーの [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 オブジェクトのすべてが更新されています。デバッグしてステップスルーを行っているため、問題を見つけることができず、ユーザーに正しい/更新されたロールが割り当てられていることがわかります。