如何在ASP.NET MVC 3中正确实现“确认密码”?

时间:2011-07-23 15:59:51

标签: .net asp.net-mvc-3

关于同一主题已经有一个answered question但是从'09开始我觉得它已经过时了。

如何在ASP.NET MVC 3中正确实现“确认密码”?

我在网上看到很多选项,其中大多数使用模型like this one中的CompareAttribute

问题在于,ConfirmPassword绝对不会出现在模型中,因为它不应该被保留。

由于MVC 3的整个不显眼的客户端验证依赖于模型,我不想在我的模型上放置ConfirmPassword属性,我该怎么办?

我应该注入自定义客户端验证功能吗?如果是这样..怎么样?

2 个答案:

答案 0 :(得分:81)

  

因为从MVC 3整个不引人注目的客户端验证依赖于   我并不想在我的身上放置一个ConfirmPassword属性   模型,我该怎么办?

完全同意你的看法。这就是你应该使用视图模型的原因。然后在您的视图模型(专门为给定视图的要求设计的类)上,您可以使用[Compare]属性:

public class RegisterViewModel
{
    [Required]
    public string Username { get; set; }

    [Required]
    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "Confirm password doesn't match, Type again !")]
    public string ConfirmPassword { get; set; }
}

然后让您的控制器操作采用此视图模型

[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    // TODO: Map the view model to a domain model and pass to a repository
    // Personally I use and like AutoMapper very much (http://automapper.codeplex.com)

    return RedirectToAction("Success");
}

答案 1 :(得分:3)

查看MVC3应用程序的默认VS2010模板。

它包含 RegisterModel ('ViewModel'),其中包含Password和ConfirmPassword属性。验证在ConfirmPassword上设置。

所以答案是MVC中的模型不必(通常不是)与您的商业模型相同。