2014-02-13 69 views
0

我試圖讓用戶更改他的電子郵件,但當我嘗試更新數據庫時,我收到一個異常:不支持指定的方法。MVC Membership.UpdateUser(u);不支持指定方法

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult ManageEmail(LocalEmailModel model) 
{ 
    //UserProfile u = new UserProfile(); 

    if (ModelState.IsValid) 
    { 
     bool TryPasswordNow; 
     var user = Membership.GetUser(User.Identity.Name); 

     MembershipUser u = Membership.GetUser(User.Identity.Name); 

     try 
     { 
      TryPasswordNow = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.OldPassword); 
     } 

     catch (Exception) 
     { 
      TryPasswordNow = false; 
     } 

     if (TryPasswordNow == true) 
     { 
      user.Email = model.NewEmail; 
      db.SaveChanges(); 

      u.Email = model.NewEmail; 
      Membership.UpdateUser(u); 
     } 

     return RedirectToAction("Manage", "Account"); 
    } 
    return RedirectToAction("Manage", "Account"); 
} 

正如你可以看到ive試過db.savechanges和membership.updateuser。第一次通過但不改變電子郵件,第二次給我一個例外。不應該這兩個工作?爲什麼我的更改沒有註冊?謝謝..

回答

0

如果你使用SimpleMembership提供程序(檢查你的web.config),這個問題可能是duplicate of another question

爲了擴大這一點,調用SaveChanges()的原因是因爲MembershipUser對象沒有被實體框架跟蹤,所以調用它對數據庫沒有任何影響。

+0

嗨,謝謝你的回覆。好吧,我看到了,但不應該db.SaveChanges();保存我的更改? – Reft

+0

不是在這種情況下 - MembershipUser(您希望通過「user」變量保存的對象)不是由實體框架跟蹤的實體 - 它只是一個像其他任何對象一樣的對象,因此就SaveChanges()而言,沒有什麼可以改變的。 – rfernandes

相關問題