2016-04-22 17 views
3

Ich habe die Ansichten/Manage/Index.cshtml geändert, um auch die E-Mail des Benutzers anzuzeigen. Ich habe auch das IndexViewModel geändert, so dass es die Zeichenfolge "E-Mail" erkennt und dann eine weitere .cshtml-Seite erstellt, die der Änderung der Telefonnummer 1 entspricht, die standardmäßig vorhanden ist. Die neue Seite aufgerufen wird ChangeEmail.cshtmlASP.NET Identitätsbearbeitung eingeloggte Benutzerdaten?

@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> 
} 

Von dem, was ich gesehen habe, geschieht das Ändern des Passwortes durch eine Aufgabe „ChangePasswordAsync“ inside UserManager.cs genannt Gibt es eine Möglichkeit, die E-Mail zu ändern, ohne eine zu machen neue Aufgabe?

EDIT: hinzugefügt mehr von der Steuerung (Index):

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 (Benutzer);' – jamiedanq

Antwort

3

die E-Mail-Adresse von Ihrem ChangeEmailViewModel des Benutzers Erhalten und dann die Details des Benutzers aktualisieren, um die userManager.UpdateAsync(user)

EDIT

[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

können Sie bitte erarbeiten? Ich bin mir nicht sicher, was wohin geht? Danke – crystyxn

+0

Ich habe mehr Details zur Antwort hinzugefügt, indem Sie Ihren Beitrag verwenden – jamiedanq

+0

Beim Versuch Ihrer Methode bekomme ich "userId existiert nicht im aktuellen Kontext". Aber ich habe es irgendwie funktionieren lassen, indem ich die Index() -Methode änderte (ich habe den ursprünglichen Beitrag oben aktualisiert) und ich kann die E-Mail erfolgreich zu "[email protected]" ändern, aber wie kann ich das in ChangeEmail machen? Da ist etwas was mir fehlt – crystyxn

Verwandte Themen