[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditUser(AspNetUser UserToEdit, string[] roles)
{
AspNetUser CurrentUser = db.AspNetUsers.Find(User.Identity.GetUserId());
AspNetUser UserBeingEdited = db.AspNetUsers.Find(UserToEdit.Id);
string[] AllRoles = db.AspNetRoles.Select(s => s.Name).ToArray();
UserManager.RemoveFromRoles(UserBeingEdited.Id, AllRoles);
// Add all of the roles returned from the webpage
if (roles.Count() > 0)
{
UserManager.AddToRoles(UserBeingEdited.Id, roles);
}
}
运行此代码后,我会检查用户,用户仍然拥有与以前相同的角色。 roles是从我的编辑用户页面返回的角色列表,并且填充正确。
任何人都知道如何让它发挥作用?没有错误或任何东西。
答案 0 :(得分:9)
我认为问题在于您从所有可用角色中删除用户,而不是从用户拥有的角色中删除。
试试这个,
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditUser(AspNetUser UserToEdit, string[] roles)
{
// Get user roles
string[] allUserRoles = UserManager.GetRoles(UserToEdit.Id).ToArray();
UserManager.RemoveFromRoles(UserToEdit.Id, allUserRoles);
// Add all of the roles returned from the webpage
if (roles.Count() > 0)
{
UserManager.AddToRoles(UserToEdit.Id, roles);
}
}