public async Task<ActionResult> Edit(EditAccountViewModel model) { if (ModelState.IsValid) { using (var manager = UserManager) { var user = await manager.FindByIdAsync(model.Id); if (user == null) { TempData.AddMessage(MessageType.Danger, string.Format(GlobalRes.UserNoFound, model.Id)); return RedirectToAction(nameof(Table)); } user.UserName = model.UserName; user.Email = model.Email; var result = await manager.UpdateAsync(user); if (!result.Succeeded) { foreach (var error in result.Errors) ModelState.AddModelError("", error); InitTeachersItems(model.PairTeacherId); return View("EditAccount", model); } var userRoles = await manager.GetRolesAsync(model.Id); // роли редактируемого юзера (await manager.RemoveFromRolesAsync(model.Id, userRoles.Intersect(model.UnselectedRoles).ToArray())) .AddErrorsIfFailed(TempData); (await manager.AddToRolesAsync(model.Id, model.SelectedRoles.Except(userRoles).ToArray())) .AddErrorsIfFailed(TempData); var pairTeacherIdHasValue = model.PairTeacherId.HasValue; if (user.HasTeacher) if (pairTeacherIdHasValue) { if (user.Teacher.TeacherId != model.PairTeacherId.Value) { // есть учитель у не обновл. пользователя когда есть у обновленого и это не один и тот же учитель _teacherRepository.RemovePairToUser(user.Teacher.TeacherId); _teacherRepository.AddPairToUser(model.PairTeacherId.Value, user.Id); } } else // есть учитель у не обновл. пользователя когда нет у обновленого _teacherRepository.RemovePairToUser(user.Teacher.TeacherId); else if (pairTeacherIdHasValue) // есть учитель у обновл. пользователя когда нету учителя у не обновленого пользователя _teacherRepository.AddPairToUser(model.PairTeacherId.Value, user.Id); TempData.AddMessage(MessageType.Success, string.Format(GlobalRes.UserSavedMsg, user.UserName)); _logger.Info("User \"{0}\" saved by {1}.", user.UserName, User.Identity.Name); } return RedirectToAction(nameof(Table)); } InitTeachersItems(model.PairTeacherId); // there is something wrong with the data values return View("EditAccount", model); }
public async Task<ActionResult> Edit(int Id) { EditAccountViewModel model; using (var userManager = UserManager) { var user = await userManager.FindByIdAsync(Id); if (user == null) { TempData.AddMessage(MessageType.Warning, string.Format(GlobalRes.UserNoFound, Id)); return RedirectToAction(nameof(Table)); } using (var roleManager = RoleManager) { var roles = roleManager.Roles.AsNoTracking().AsEnumerable(); var userRoles = await userManager.GetRolesAsync(Id); model = new EditAccountViewModel() { Id = user.Id, Email = user.Email, UserName = user.UserName, Roles = roles.Select(r => new RoleItem() { Value = r.Name, Selected = userRoles.Contains(r.Name) }).ToList() }; } InitTeachersItems(user.Teacher?.TeacherId); } return View("EditAccount", model); }