public ActionResult Edit(EditUserViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            string errorMessage = "Sorry, we were unable to edit your account.";

            try
            {
                int userId;
                string userLogin;

                if (model.IsAdminEdit)
                {
                    userId = model.UserId;
                    userLogin = model.Email;

                    if (model.IsInactiveUser && Roles.IsUserInRole(userLogin, "ActiveUser"))
                    {
                        Roles.RemoveUserFromRole(userLogin, "ActiveUser");
                    }
                    else if (!Roles.IsUserInRole(userLogin, "ActiveUser"))
                    {
                        Roles.AddUserToRole(userLogin, "ActiveUser");
                    }
                }
                else
                {
                    userId = WebSecurity.CurrentUserId;
                    userLogin = WebSecurity.CurrentUserName;
                }

                if (model.Password != null)
                {
                    // Change password
                    try
                    {
                        string tempToken = WebSecurity.GeneratePasswordResetToken(userLogin);
                        WebSecurity.ResetPassword(tempToken, model.Password);
                        ViewBag.Message = model.IsAdminEdit ? "The password has been changed. " :
                            "Your password has been changed. ";
                    }
                    catch
                    {
                        ViewBag.Message = model.IsAdminEdit ? "Unable to change the password. " :
                            "We were unable to change your password. ";
                    }
                }

                ApplicationUser user = model.ToApplicationUser();
                user.ApplicationUserId = WebSecurity.GetUserId(userLogin);
                user.Email = userLogin;

                ResultEnum result = userService.UpdateApplicationUser(user);
                switch (result)
                {
                    case ResultEnum.Success:
                        ViewBag.Message += model.IsAdminEdit ? "The account details have been updated." :
                            "Your account details have been updated.";

                        return View(model);

                    case ResultEnum.Fail:
                        ModelState.AddModelError("ErrorMessage", errorMessage);
                        return View(model);
                }
            }
            catch (Exception)
            {
                ModelState.AddModelError("ErrorMessage", errorMessage);
                return View(model);
            }

            return View(model);
        }
        public ActionResult Edit(int? user)
        {
            EditUserViewModel model = new EditUserViewModel();
            int userId;
            bool isAdminEdit;

            string errorMessage = (user != null) ? "Unable to retrieve the account details." :
                    "We were unable to retrieve your account details.";

            // Get user data for model
            try
            {
                if (user != null)
                {
                    if (!Roles.IsUserInRole("Admin"))
                    {
                        RedirectToAction("Index", "Home");
                    }

                    isAdminEdit = true;
                    userId = user.GetValueOrDefault();
                }
                else
                {
                    isAdminEdit = false;
                    userId = WebSecurity.CurrentUserId;
                }

                Result<ApplicationUser> result = userService.GetApplicationUserById(userId);

                switch (result.Status)
                {
                    case ResultEnum.Success:
                        model = result.Data.ToMembershipViewModel<EditUserViewModel>();
                        model.UserId = userId;
                        model.IsAdminEdit = isAdminEdit;
                        model.IsInactiveUser = !Roles.GetRolesForUser(model.Email).Contains("ActiveUser");

                        if (Roles.IsUserInRole(result.Data.Email, "Admin"))
                        {
                            model.IsAdmin = true;
                        }

                        return View(model);

                    case ResultEnum.Fail:
                        break;

                    default:
                        break;
                }
            }
            catch
            {
                ModelState.AddModelError("ErrorMessage", errorMessage);
                return View(model);
            }

            ModelState.AddModelError("ErrorMessage", errorMessage);
            return View(model);
        }