public async Task <IActionResult> Edit(string id) { if (id == null) { return(NotFound()); } ApplicationUser ux = await userManager.FindByIdAsync(id); if (ux != null) { var roles = this.roleManager.Roles.Select(r => r.Name).ToList <string>(); ViewBag.Roles = roles; AdminEditUserModel eum = new AdminEditUserModel(ux); return(View(eum)); } return(View()); }
public async Task <IActionResult> Edit(AdminEditUserModel formInput) { string successURL = string.Format("/Default/Feedback?message={0}", "It was not possible to update the account details"); if (ModelState.IsValid) { ApplicationUser ux = await userManager.FindByIdAsync(formInput.Id); successURL = string.Format("/Default/Feedback?message={0}", "It was not possible to update the account details. However, the model state is valid."); if (ux != null) { ux.FirstName = formInput.FirstName; ux.LastName = formInput.LastName; ux.Email = formInput.Email; ux.BIO = formInput.BIO; ux.ProfilePictureURL = formInput.ProfilePictureURL; ux.Gender = formInput.Gender; ux.DOB = formInput.DOB; successURL = string.Format("/Default/Feedback?message={0}", "The account details have been updated successfully."); IdentityResult tempResult = await userManager.UpdateAsync(ux); //this should be populated from the database ->done :) Now you only have to update it in the views: //Register user, and admin create and update user views var userRoles = this.roleManager.Roles.Select(r => r.Name).ToList <string>(); foreach (string role in userRoles) { if (await userManager.IsInRoleAsync(ux, role)) { await userManager.RemoveFromRoleAsync(ux, role); } } var result2 = await userManager.AddToRoleAsync(ux, formInput.SpecRole); if (tempResult.Succeeded) { formInput.HomeContact.User = ux.Id; formInput.HomeContact.IsPrimary = true; formInput.HomeContact.IsNextOfKin = false; formInput.WorkContact.User = ux.Id; formInput.WorkContact.IsPrimary = false; formInput.WorkContact.IsNextOfKin = false; formInput.HomeAddress.User = ux.Id; formInput.HomeAddress.IsPrimary = true; formInput.HomeAddress.IsNextOfKin = false; formInput.WorkAddress.User = ux.Id; formInput.WorkAddress.IsPrimary = false; formInput.WorkAddress.IsNextOfKin = false; formInput.NextOfKin.UserID = ux.Id; formInput.NOKAddress.User = ux.Id; formInput.NOKAddress.IsNextOfKin = true; formInput.NOKContact.User = ux.Id; formInput.NOKContact.IsNextOfKin = true; EditUserModel currentlyStored = new EditUserModel(ux); if (currentlyStored.HomeAddress == null) { this._context.UserAddresseses.Add(formInput.HomeAddress); } else { currentlyStored.HomeAddress.UpdateMe(formInput.HomeAddress); } if (currentlyStored.WorkAddress == null) { this._context.UserAddresseses.Add(formInput.WorkAddress); } else { currentlyStored.WorkAddress.UpdateMe(formInput.WorkAddress); } if (currentlyStored.HomeContact == null) { this._context.UserContactDetails.Add(formInput.HomeContact); } else { currentlyStored.HomeContact.UpdateMe(formInput.HomeContact); } if (currentlyStored.WorkContact == null) { this._context.UserContactDetails.Add(formInput.WorkContact); } else { currentlyStored.WorkContact.UpdateMe(formInput.WorkContact); } if (currentlyStored.NextOfKin == null) { this._context.NextOfKins.Add(formInput.NextOfKin); } else { currentlyStored.NextOfKin.UpdateMe(formInput.NextOfKin); } if (currentlyStored.NOKAddress == null) { this._context.UserAddresseses.Add(formInput.NOKAddress); } else { currentlyStored.NOKAddress.UpdateMe(formInput.NOKAddress); } if (currentlyStored.NOKContact == null) { this._context.UserContactDetails.Add(formInput.NOKContact); } else { currentlyStored.NOKContact.UpdateMe(formInput.NOKContact); } } if ((formInput.Password == null & tempResult.Succeeded)) { this._context.SaveChanges(); return(Redirect(successURL)); } else if (formInput.Password != null & tempResult.Succeeded) { var newPasswordHash = new PasswordHasher <ApplicationUser>().HashPassword(ux, formInput.Password); var store = new UserStore <ApplicationUser>(this._context); await store.SetPasswordHashAsync(ux, newPasswordHash); this._context.SaveChanges(); return(Redirect(successURL)); } } } var roles = this.roleManager.Roles.Select(r => r.Name).ToList <string>(); ViewBag.Roles = roles; return(View(formInput)); }