2010-12-15 46 views
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); 
     } 
+0

你調試通過?你是否遇到模型驗證錯誤? – Paddy 2010-12-15 09:05:14

+0

嗨帕迪,我剛剛做到了。在if(ModelState.IsValid)行之後會發生什麼,它會跳過整個if語句,並直接跳轉到表單重新顯示的代碼。 – 109221793 2010-12-15 09:11:45

+0

作爲調試步驟,您是否嘗試取出(註釋)ModelState.IsValid並讓框架處理「ChangePassword」。那樣有用嗎? – msuhash 2010-12-15 09:23:27

回答