public ActionResult Edit(UserAccountView UserAccountView, Guid Roles) { UserAccessRepository rep = new UserAccessRepository(); List <Role> roles = rep.GetAllRoles(); UserAccountView.Roles = new List <SelectListItem>(); UserAccountView.UserAccount.Role = rep.GetRole(Roles); ModelState.Remove("Roles"); //We remove any model state error on Roles because we manually load it from the database as drop-down list only returns the selected role foreach (Role role in roles) { UserAccountView.Roles.Add(new SelectListItem { Text = role.RoleName, Value = role.ID.ToString() }); } if (ModelState.IsValid) { if (UserAccountView.UserAccount != null) { //////////////////// MembershipUser user = Membership.GetUser(UserAccountView.UserAccount.Username); UserAccount existingAccount = rep.GetUserAccount(UserAccountView.UserAccount.Username); foreach (AvailableFunction func in existingAccount.Role.AvailableFunctions) { System.Web.Security.Roles.RemoveUserFromRole(existingAccount.Username, func.FunctionName); } foreach (var func in UserAccountView.UserAccount.Role.AvailableFunctions) { System.Web.Security.Roles.AddUserToRole(UserAccountView.UserAccount.Username, func.FunctionName); } //////////////////// bool status = rep.UpdateUserAccount(UserAccountView.UserAccount); if (status) { ViewData["Message"] = "User updated successfully!"; } else { ViewData["Message"] = "There was an error updating this user. Please contact your administrator!"; } return(View("Edit", null)); } else { ViewData["Message"] = "User could not be found!"; } } return(View(UserAccountView)); }