public async Task<ActionResult> Edit(UsersHandlerEditViewModel model, params string[] selectedRole) { if (!ModelState.IsValid) { ModelState.AddModelError("", "Model is not valid!"); return View(); } ApplicationUser user = await IdentityRepository.UserManager.FindByIdAsync(model.Id); if (user == null) return HttpNotFound(); user.UserName = model.UserName; user.Email = model.Email; IList<string> userRoles = await IdentityRepository.UserManager.GetRolesAsync(user.Id); selectedRole = selectedRole ?? new string[] { }; IdentityResult result = await IdentityRepository.UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray()); IsResultNotSucceededAddModelError(result); result = await IdentityRepository.UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray()); IsResultNotSucceededAddModelError(result); if (model.ResetPassword) { if (!ModelState.IsValid) return View(model); string code = await IdentityRepository.UserManager.GeneratePasswordResetTokenAsync(user.Id); string callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); await IdentityRepository.UserManager.SendEmailAsync(user.Id, "Reset Password", callbackUrl); } if (result.Succeeded) return RedirectToAction("Index"); return View(); }
public async Task<ActionResult> Edit(string id) { if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); ApplicationUser user = await IdentityRepository.UserManager.FindByIdAsync(id); if (user == null) return HttpNotFound(); IList<string> userRoles = await IdentityRepository.UserManager.GetRolesAsync(user.Id); IQueryable<SelectListItem> rolesListForSelectedUser = IdentityRepository.RoleManager.Roles.Select(x => new SelectListItem { Selected = userRoles.Contains(x.Name), Text = x.Name, Value = x.Name }); var model = new UsersHandlerEditViewModel { Id = user.Id, UserName = user.UserName, Email = user.Email, ResetPassword = false, RolesList = rolesListForSelectedUser }; return View(model); }