2016-07-23 2 views
0

ASP.NET MVC4 App을 개발 중입니다. 나는 실제로 사용자의 전자 메일 주소를 변경할 수 있기를 원합니다.ASP.NET MVC에서 사용자의 전자 메일 주소를 변경하는 방법

ModifyEmail.cshtml

@model Project.Models.ModifyEmailModel 
 

 
@using (Html.BeginForm("Manage", "Account")) { 
 
@Html.AntiForgeryToken() 
 

 
@Html.ValidationSummary(true) 
 

 
<fieldset> 
 
    <legend>Change Email Address</legend> 
 
    <ol> 
 
     <li> 
 
      @Html.LabelFor(m => m.OldEmailAddress) 
 
      @Html.EditorFor(m => m.OldEmailAddress) 
 
      @Html.ValidationMessageFor(m => m.OldEmailAddress) 
 
     </li> 
 
     <li> 
 
      @Html.LabelFor(m => m.NewEmailAddress) 
 
      @Html.EditorFor(m => m.NewEmailAddress) 
 
      @Html.ValidationMessageFor(m => m.NewEmailAddress) 
 
     </li> 
 
     <li> 
 
      @Html.LabelFor(m => m.ConfirmEmailAddress) 
 
      @Html.TextBoxFor(m => m.ConfirmEmailAddress) 
 
      @Html.ValidationMessageFor(m => m.ConfirmEmailAddress) 
 
     </li> 
 
    </ol> 
 
    <input type="submit" value="Changer l'addresse email" /> 
 
</fieldset> 
 
} 
 

 
@section Scripts { 
 
    @Scripts.Render("~/bundles/jqueryval") 
 
}

AccountModels.cs

namespace Project.Models 
{ 
    public class UsersContext : DbContext 
    { 
     public UsersContext() 
      : base("DefaultConnection") 
     { 
     } 

     public DbSet<UserProfile> UserProfiles { get; set; } 

    } 


    [Table("UserProfile")] 
    public class UserProfile 
    { 
     [Key] 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
     public int UserId { get; set; } 
     public string UserName { get; set; } 
     public string EmailId { get; set; } 
     public string Details { get; set; } 
    } 


    public class ModifyEmailModel 
    { 
     [Required(ErrorMessage = "l'addresse email actuelle est requise")] 
     [DataType(DataType.EmailAddress)] 
     [Display(Name = "Addresse email actuelle")] 
     public string OldEmailAddress { get; set; } 

     [Required(ErrorMessage = "la nouvelle addresse email est requise")] 
     [DataType(DataType.EmailAddress)] 
     [Display(Name = "Nouvelle addresse email")] 
     public string NewEmailAddress { get; set; } 

     [DataType(DataType.EmailAddress)] 
     [Display(Name = "Confirmer la nouvelle addresse mail")] 
     [Compare("NewEmailAddress", ErrorMessage = "Le nouvelle addresse email et la confirmation de l'addresse email ne correspondent pas.")] 
     public string ConfirmEmailAddress { get; set; } 
    } 




} 

나는 AccountController.cs의 동작을 구현하는 방법을 알아낼 수 없습니다, 도와주세요!

+0

지금 계정 컨트롤러에 무엇이 있습니까? –

+0

죄송합니다. 그러나 귀하의 질문은 매우 불분명합니다. 너가하고 싶어하는 일이 뭐야? 그리고 뭘 아직 시도 했니 ?? –

+0

ModifyEmail 작업을 작성하여 이전/신규를 입력하고 이메일을 확인하고 DB에 저장할 수 있습니다. 비밀번호 관리와 비슷하지만이를 구현하는 방법을 알 수는 없습니다. – xxxx

답변

1

귀하의 설명에서 알 수 있듯이 이메일 주소를 수정하는 작업 방법이 필요합니다. 그래서, 당신은,

[HttpPost] 
public ActionResult Manage(ModifyEmailModel data) 
{ 
    if(data.NewEmailAddress == data.ConfirmEmailAddress) 
    { 
     // db is your context instance 
     var u = db.UserProfiles.Where(x => x.EmailId == OldEmailAddress).SingleOrDefault(); 
     u.EmailID = data.NewEmailAddress; 
     db.SaveChanges(); 

    } 
    else 
     string error = "Email ID's don't match"; 
    return View(); 
} 

당신이 방법을 GET에서보기를로드하는 방법 즉,보기에 이메일을 표시하려면 다음을 넣으려면,

public ActionResult Manage() 
{ 
    // at this point you must have the username for your currently logged in user 
    var u = db.UserProfiles.Where(x => x.UserName == UserName).SingleOrDefault(); 
    return View(u); 
} 
+0

감사합니다! 실제로 나는 현재 이메일 주소를 표시하고자하는 몇 가지 다른 문제가 있습니다. @ Html.LabelFor (m => m.OldEmailAddress) @ Html.DisplayFor (m => m.OldEmailAddress)하지만 그렇지 않습니다. 이메일 주소 – xxxx

+0

을 표시하는 것은 컨트롤러에서로드하는 것입니까 ?? –

+0

무엇을 의미합니까? 난, 미안 해요 – xxxx

0

기본 ID 계정을 다음을 시도 할 수 있습니다 컨트롤러는 Manage 액션을 사용하여 비밀번호를 업데이트하거나 생성합니다. 이것을 유지하려면 ManageEmail과 같은 다른 GET 액션을 만들 것을 제안합니다. 여기서 ManageEmail은 링크 또는 버튼에서 생성 한 위의 뷰를 원래의 Manage 페이지 아래에서 반환 할 수 있습니다. 그런 다음 새 이메일로 변경 이메일/업데이트 비동기를 수행 할 POST 작업 ManageEmail을 만듭니다.

Manage.cshtml 내부에서 Html.Action을 사용하여 다른 get 메소드를 호출 할 수 있습니다. 당신의 AccountController.cs 내부

@Html.Partial("_ChangePassword") // change password partial here 
@Html.Action("ManageEmail") // this will call the partial view page with your custom model 


다음 2 가지 방법을 추가

//GET ManageEmail 
public ActionResult ManageEmail() 
{ 
    var model = new ModifyEmailModel() 
    { 
    OldEmailAddress = UserManager.GetEmail(User.Identity.GetUserId()) // this will load the current email for your view 
    }; 
    return View("_ManageEmail",model); // _ManageEmail is your partial view name 

}

//POST ManageEmail 
[HttpPost()] 
[ValidateAntiForgeryToken()] 
public async Task<ActionResult> ManageEmail(ModifyEmailModel data) 
{ 
    //some validation here like if email is valid or not existing in the database to avoid duplicate 
    var user = UserManager.FindById(User.Identity.GetUserId()); 
    await UserManager.UpdateAsync(user); 
    return RedirectToAction("Manage"); 
} 


그런 다음 바로 ManageEmail POST 액션을 대상으로하여 부분 뷰를 편집 할 수 있습니다.

+0

글쎄, 내가 실제로하고있는 것은 ManageEsh ..cshtml을 Manage.cshtml에서 호출 된 부분보기로 갖는 것입니다. 그래서 거기에 ModifyEmail.cshtml과 _ ChangePasswordPartial이라는 부분 뷰가 두 개 있습니다. 난 아직도 하나의보기에서 두 가지 모델을 사용하여 두 가지 모델에 관한 문제가 있는데 튜플을 사용했지만, 제출할 때 항상 오류가 발생합니다. – xxxx

+1

@xxxx는 괜찮 으면 좋겠지 만 두 가지 다른 작업 . Html.Action을 사용하여 get 메소드를 호출하여 부분 뷰를로드 할 수 있습니다. 내 대답을 알려주지. 내가 보여 줄께. –

+1

@xxxx 내 업데이트 답변을 참조하십시오. –

관련 문제