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);
        }