2016-04-22 33 views
3

我修改了Views/Manage/Index.cshtml以顯示用戶的電子郵件。我也修改了IndexViewModel,所以它識別「電子郵件」字符串,然後創建另一個.cshtml頁面,類似於默認情況下更改第一個電話號碼。新的頁面被稱爲ChangeEmail.cshtmlASP.NET身份編輯登錄用戶的數據?

@using (Html.BeginForm("ChangeEmail", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Add an email</h4> 
    <hr /> 
    @Html.ValidationSummary("", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Email, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(model => model.Email, new { @class = "form-control" }) 

     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Submit" /> 
     </div> 
    </div> 
} 

從我所看到的,密碼的變化情況,通過一個名爲「ChangePasswordAsync」裏面UserManager.cs 任務有沒有辦法來改變電子郵件而不進行新任務?

編輯:增加了更多的從控制器(指數):

public async Task<ActionResult> Index(ManageMessageId? message) 
      { 
       ViewBag.StatusMessage = 
        message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." 
        : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set." 
        : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set." 
        : message == ManageMessageId.Error ? "An error has occurred." 
        : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added." 
        : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed." 
        : message == ManageMessageId.EmailChangedSuccess ? "Your email has been changed" 
        : ""; 

       var userId = User.Identity.GetUserId(); 
       var userEmail = User.Identity.Name; 
       var user = UserManager.FindById(userId); 



       var model = new IndexViewModel 
       { 
        HasPassword = HasPassword(), 
        PhoneNumber = await UserManager.GetPhoneNumberAsync(userId), 
        TwoFactor = await UserManager.GetTwoFactorEnabledAsync(userId), 
        Logins = await UserManager.GetLoginsAsync(userId), 
        BrowserRemembered = await AuthenticationManager.TwoFactorBrowserRememberedAsync(userId), 
        Email = user.Email, 
        City = user.City, 
        Region = user.Region 


       }; 
       user.Email = "[email protected]"; 
       UserManager.UpdateAsync(user); 

       return View(model); 
      } 

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> ChangeEmail(ChangeEmailViewModel model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 



      return RedirectToAction("Index", new { Message = ManageMessageId.EmailChangedSuccess }); 
     } 
+0

'userManager.UpdateAsync(user);' – jamiedanq

回答

3

ChangeEmailViewModel獲取用戶的電子郵件地址,然後使用userManager.UpdateAsync(user)

編輯

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> ChangeEmail(ChangeEmailViewModel model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 
      //Get the user's Id 
      var userId = User.Identity.GetUserId(); 

      //get the user (you can modify the variables to fit yours) 
      var user = UserManager.FindByIdAsync(userId); 

      //this is how to change the Email 
      user.Result.Email= model.Email// **EDIT**; 

     userManager.UpdateAync(user.Result); 

      return RedirectToAction("Index", new { Message = ManageMessageId.EmailChangedSuccess }); 
     } 
更新用戶的詳細信息
+0

請問您能詳細說明一下嗎?我不知道哪裏去了哪裏?謝謝 – crystyxn

+0

我已經通過使用你的文章 – jamiedanq

+0

添加更多的細節到答案當我嘗試你的方法時,我得到「userId在當前上下文中不存在」。不過,我通過改變Index()方法(我已經更新了上面的原始文章),並且我可以成功地將電子郵件更改爲「[email protected]」,但是我怎樣才能在ChangeEmail中執行此操作?有一些我失蹤 – crystyxn