J'ai hérité d'un système qui a été écrit en MVC. Ce système utilise l'API d'adhésion asp.net, qui fonctionne bien. Je viens de découvrir un bug mais par lequel l'utilisateur est incapable de changer son mot de passe.Modifier le contrôleur de mot de passe ne fonctionne pas - MVC
Le système affiche le formulaire à entrer dans l'ancien mot de passe, et le nouveau mot de passe deux fois pour confirmer, mais en cliquant sur Soumettre, il affiche simplement le formulaire et ne change pas le mot de passe.
Je suis passé par le code mais comme je suis assez nouveau pour MVC, et en utilisant l'API d'adhésion, je ne vois rien de trop faux avec cela.
Voici les codes GET et POST provenant du contrôleur de compte. Si quelqu'un pouvait voir quelque chose de mal avec cela, je l'apprécierais grandement. Si quelqu'un a besoin de moi de publier des informations/code supplémentaire, s'il vous plaît demander :)
En outre, après le débogage dans le code, ce qui semble se passer est, après
if (ModelState.IsValid)
est frappé, l'instruction if imbriquée dans ce est sauté et le code saute directement vers le bas pour réafficher le formulaire.
[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);
}
Avez-vous débogué à travers? Êtes-vous en train de rencontrer des erreurs de validation de modèle? – Paddy
Salut Paddy, je viens de le faire. Que se passe-t-il après la ligne "if (ModelState.IsValid)", il saute toute l'instruction if dans celui-ci, et saute directement au code où le formulaire est réaffiché. – 109221793
En tant qu'étape de débogage, avez-vous essayé de sortir (commentant) ModelState.IsValid et de laisser la structure gérer "ChangePassword".? Est-ce que ça fonctionne? – msuhash