public ActionResult Create2() { var viewModel = new CreateUserFormViewModel2(); viewModel.AllRolesList = RoleManager.Roles.ToList().Select(x => new UserRole() { IsSelected = false, RoleId = x.Id, RoleName = x.Name }).ToList(); viewModel.AllClaimsList = ClaimsStore.AllClaims.Select(x => new UserClaim() { IsSelected = false, ClaimType = x.Type, ClaimValue = x.Value, }).ToList(); return(View("CreateUserForm2", viewModel)); }
public async Task <ActionResult> Create2(CreateUserFormViewModel2 viewModel) { // selectedRole is the name of the checkbox list on the html form // HERE WE ARE USING SAME FORM & VIEWMODEL FOR ADD & EDIT // BUT BOTH SCENARIOS ARE DIFFERENT, // ADD NEED PASSWORD & CONFIRM PASSWORD IN VIEW & VIEWMODEL & THEY ARE MANDATORY // WITH THEM MODEL WILL BE NOT VALIDATED // EDIT DO NOT NEED PASSWORD & CONFIRM PASSWORD IN VIEW & VIEWMODEL // MODEL VALIDATION WILL STOP US FROM EDITING USER AND WILL ASK FOR PASSWORKD & CONFIRM PASSWORD // SPLIT VIEWS & VIEWMODELS FOR ADD & EDIT IdentityResult result = null; ApplicationUser user = null; if (!ModelState.IsValid) { // Invalid Model, all Model Errors will be auto shown, no need to add yourself // Model has those Error Messages in it & Shown Automatically. ModelState.AddModelError("", "Something failed."); viewModel.AllRolesList = RoleManager.Roles.ToList().Select(x => new UserRole() { IsSelected = false, RoleId = x.Id, RoleName = x.Name }).ToList(); viewModel.AllClaimsList = ClaimsStore.AllClaims.Select(x => new UserClaim() { IsSelected = false, ClaimType = x.Type, }).ToList(); return(View("CreateUserForm2", viewModel)); } // New User user = new ApplicationUser { UserName = viewModel.Email, Email = viewModel.Email, DrivingLicense = viewModel.DrivingLicense, Phone = viewModel.Phone, }; result = await UserManager.CreateAsync(user, viewModel.Password); if (!result.Succeeded) { // Error occures while Adding New User foreach (var error in result.Errors) { ModelState.AddModelError("", error); } viewModel.AllRolesList = RoleManager.Roles.ToList().Select(x => new UserRole() { IsSelected = false, RoleId = x.Id, RoleName = x.Name }).ToList(); viewModel.AllClaimsList = ClaimsStore.AllClaims.Select(x => new UserClaim() { IsSelected = false, ClaimType = x.Type, ClaimValue = x.Value, }).ToList(); return(View("CreateUserForm2", viewModel)); } // New User Added Successfully now add it roles if (viewModel.IsAnyRoleSelected() == false) { ViewBag.Message = "Record(s) addded successfully."; return(List()); } // If some roles are selected for New User, Add those roles result = await UserManager.AddToRolesAsync(user.Id, viewModel.GetSelectedRoles()); // Errors occurs while adding Roles to New user if (!result.Succeeded) { // Error occurs while adding roles foreach (var error in result.Errors) { ModelState.AddModelError("", error); } viewModel.AllRolesList = RoleManager.Roles.ToList().Select(x => new UserRole() { IsSelected = false, RoleId = x.Id, RoleName = x.Name }).ToList(); viewModel.AllClaimsList = ClaimsStore.AllClaims.Select(x => new UserClaim() { IsSelected = false, ClaimType = x.Type, ClaimValue = x.Value, }).ToList(); return(View("CreateUserForm2", viewModel)); } List <Claim> selectedClaimsOnForm = viewModel.GetSelectedClaims(); // Adding Claim Array foreach (var claim in selectedClaimsOnForm) { result = await UserManager.AddClaimAsync(user.Id, claim); } if (!result.Succeeded) { // Error occurs while adding roles foreach (var error in result.Errors) { ModelState.AddModelError("", error); } viewModel.AllRolesList = RoleManager.Roles.ToList().Select(x => new UserRole() { IsSelected = false, RoleId = x.Id, RoleName = x.Name, }).ToList(); viewModel.AllClaimsList = ClaimsStore.AllClaims.Select(x => new UserClaim() { IsSelected = false, ClaimType = x.Type, ClaimValue = x.Value, }).ToList(); return(View("CreateUserForm2", viewModel)); } ViewBag.Message = "Record(s) addded successfully."; return(List()); }