Смена пароля контроллера не работает - MVC - PullRequest
0 голосов
/ 15 декабря 2010

Я унаследовал систему, которая была написана в MVC. Эта система использует API членства asp.net, который работает хорошо. Однако я только что обнаружил ошибку, из-за которой пользователь не может изменить свой пароль.

Система отображает форму для ввода старого пароля и новый пароль дважды для подтверждения, однако при нажатии кнопки «Отправить» она просто отображает форму повторно и не меняет пароль.

Я прошел через код, но, поскольку я достаточно новичок в MVC, и, используя API членства, я не вижу в этом ничего слишком неправильного.

Вот код GET и POST из контроллера аккаунта. Если кто-то может увидеть что-то не так с этим, я был бы очень признателен. Если кому-то понадобится разместить дополнительную информацию / код, пожалуйста, спросите:)

Кроме того, после отладки кода кажется, что после

if (ModelState.IsValid)
Нажатие

, вложенный оператор if в нем пропускается, и код переходит прямо вниз, чтобы снова отобразить форму.

[Authorize]
        public ActionResult ChangePassword(string source)
        {
            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
            ViewData["source"] = source;

            if (!string.IsNullOrEmpty(source))
            {
                return View("ChangePassword", source);
            }

            return View("ChangePassword", "User");
        }

        [Authorize]
        [HttpPost]
        public ActionResult ChangePassword(ChangePasswordModel model, FormCollection formValues)
        {
            string source = formValues["source"];

            if (formValues["btnCancel"] != null)
            {
                RedirectToRouteResult result = null;

                // The user has clicked cancel. Redirect back to source!
                //
                switch (source)
                {
                    case "user":
                        result = RedirectToAction("Index", "ManageAccount", new { Area = "User" });
                        break;
                    case "administrator":
                        result = RedirectToAction("Index", "ManageAccount", new { Area = "Administrator" });
                        break;
                }

                return result;
            }

            if (ModelState.IsValid)
            {
                if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword))
                {
                    return RedirectToAction("Index", "ManageAccount", new { Area = "User" });
                }
                else
                {
                    ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
                }
            }

            // If we got this far, something failed, redisplay form
            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
            ViewData["source"] = source;
            return View("ChangePassword", formValues["source"], model);
        }

1 Ответ

1 голос
/ 15 декабря 2010

Может быть, вы могли бы проверить ошибки, как указано здесь Состояние модели ASP.NET MVC

...