public async Task <IActionResult> CreateOrUpdate(UsersViewModel viewModel) { ViewBag.Roles = _roleManager.GetAllRoles(); if (viewModel.Id != null) { ModelState.Remove("Password"); ModelState.Remove("ConfirmPassword"); ModelState.Remove("ImageFile"); } if (ModelState.IsValid) { IdentityResult result = null; if (viewModel.ImageFile != null) { viewModel.Image = _userManager.CheckAvatarFileName(viewModel.ImageFile.FileName); } viewModel.Roles = new List <UserRole> { new UserRole { RoleId = (int)viewModel.RoleId } }; viewModel.BirthDate = viewModel.PersianBirthDate.ConvertShamsiToMiladi(); if (viewModel.Id != null) { var user = await _userManager.FindByIdAsync(viewModel.Id.ToString()); user.FirstName = viewModel.FirstName; user.LastName = viewModel.LastName; user.BirthDate = viewModel.BirthDate; user.Email = viewModel.Email; user.UserName = viewModel.UserName; user.Gender = viewModel.Gender.Value; user.PhoneNumber = viewModel.PhoneNumber; user.Roles = viewModel.Roles; user.Bio = viewModel.Bio; var userRoles = await _userManager.GetRolesAsync(user); if (viewModel.ImageFile != null) { await viewModel.ImageFile.UploadFileAsync($"{_env.WebRootPath}/avatars/{viewModel.Image}"); FileExtensions.DeleteFile($"{_env.WebRootPath}/avatars/{user.Image}"); user.Image = viewModel.Image; } result = await _userManager.RemoveFromRolesAsync(user, userRoles); if (result.Succeeded) { result = await _userManager.UpdateAsync(user); } } else { await viewModel.ImageFile.UploadFileAsync($"{_env.WebRootPath}/avatars/{viewModel.Image}"); viewModel.EmailConfirmed = true; result = await _userManager.CreateAsync(_mapper.Map <User>(viewModel), viewModel.Password); } if (result.Succeeded) { TempData["notification"] = OperationSuccess; } else { ModelState.AddErrorsFromResult(result); } } return(PartialView("_RenderUser", viewModel)); }