0
我已經繼承了一個用MVC編寫的系統。該系統使用asp.net成員資格api,效果很好。我剛剛發現了一個錯誤,用戶無法更改他/她的密碼。更改密碼控制器不工作 - MVC
系統顯示輸入舊密碼的表單和新密碼兩次確認,但點擊提交後,只會重新顯示錶單,並且不會更改密碼。
我已經通過代碼,但由於我足夠新的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);
}
你調試通過?你是否遇到模型驗證錯誤? – Paddy 2010-12-15 09:05:14
嗨帕迪,我剛剛做到了。在if(ModelState.IsValid)行之後會發生什麼,它會跳過整個if語句,並直接跳轉到表單重新顯示的代碼。 – 109221793 2010-12-15 09:11:45
作爲調試步驟,您是否嘗試取出(註釋)ModelState.IsValid並讓框架處理「ChangePassword」。那樣有用嗎? – msuhash 2010-12-15 09:23:27