2012-04-23 67 views
1

你能帮助我建立在MVC3我“ChangePassword”观?查看“ChangePassword”在MVC 3

这里我试图做:

ProfileTeacherController.cs

public ViewResult ChangePassword(int id) 
    { 
     var user = User.Identity.Name; 
     int inter = int.Parse(user); 

     var teachers = from t in db.Teachers 
         where t.AffiliationNumber == inter 
         select t; 

     Teacher teacher = new Teacher(); 
     foreach (var teach in teachers) 
     { 
      teacher = teach; 
     } 

     return View(teacher); 
    } 

    [HttpPost] 
    public ActionResult ChangePassword(Teacher teacher) 
    { 
     if (ModelState.IsValid) 
     { 
      // How can I compare the two fields password in my view ? 
      db.Entry(teacher).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Edit", "ProfileTeacher", new { id = teacher.TennisClubID }); 
     } 
     return View(teacher); 
    } 

这里ChangePassword(查看)

@model TennisOnline.Models.Teacher 
@{ 
ViewBag.Title = "ChangePassword"; 
} 

<h2>Changement du mot de passe</h2> 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend></legend> 

    <div class="editor-label"> 
     @Html.Label("Enter the new password") 
    </div> 
    <div class="editor-field"> 
     @Html.PasswordFor(model => model.Pin, new { value = Model.Pin }) 
    </div> 

    <div class="editor-label"> 
     @Html.Label("Confirm your password") 
    </div> 
    <div class="editor-field"> 
     @Html.Password("ConfirmPassword") 
    </div> 


    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 
} 

所以,我怎么能在我的控制器中验证是否两个pa sswords是一样的,请吗?在此先感谢

回答

3

我会建议一个视图模型的使用:

public class TeacherViewModel 
{ 
    ... 

    [Compare("ConfirmPassword")] 
    public string Password { get; set; } 

    public string ConfirmPassword { get; set; } 
} 

现在有你的观点采取视图模型,也是你的帖子行动。

除了在你的GET操作,你似乎已经写了一些foreach循环,我看不到它的用法。你可以简化:

[Authorize] 
public ViewResult ChangePassword(int id) 
{ 
    var user = User.Identity.Name; 
    int inter = int.Parse(user); 
    var teacher = db.Teachers.SingleOrDefault(t => t.AffiliationNumber == inter); 
    return View(teacher); 
} 
+0

谢谢它很好用!并且还要感谢关于“foreach循环”的提示 – Razor 2012-04-23 09:08:39

4

另外,你可以添加消息,当这两个密码在比较属性中不相同时。

[Compare("NewPassword", ErrorMessage = "The new password and confirm password do not match.")]