在MVC视图上没有客户端密码匹配

时间:2010-08-24 09:19:45

标签: asp.net asp.net-mvc

我有以下(删节)DTO注册新用户:

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class RegisterModel
{
    //.....
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }
}

然后将其包装在View Model中:

public class RegisterModelViewData: BaseViewData
{
    public RegisterModel RegisterModel { get; set; }
    public int PasswordLength { get; set; }
}

最后,在视图中,我有两个字段:

<div class="editor-field">
    <%= Html.PasswordFor(m => m.RegisterModel.Password) %>
    <%= Html.ValidationMessageFor(m => m.RegisterModel.Password) %>
</div>
<div class="editor-field">
    <%= Html.PasswordFor(m => m.RegisterModel.ConfirmPassword) %>
    <%= Html.ValidationMessageFor(m => m.RegisterModel.ConfirmPassword) %>
</div>

显然,如果密码不匹配,我应该得到客户端验证,没有帖子。我得到一个帖子,然后收到一条消息“帐户创建失败”,但没有关于密码不匹配的信息。为简洁起见,我在此处省略了密码proeprties中的Required和MininumLength属性,但它们似乎按预期运行并在客户端验证。

2 个答案:

答案 0 :(得分:17)

现在可以在ASP.MVC 3中使用,以防任何人仍然想知道

public string Password { get; set; }
[Compare("Password", ErrorMessage = "Passwords must match")]
public string ConfirmPassword { get; set; }

答案 1 :(得分:1)

PropertiesMustMatch 是类型验证程序,而不是属性验证程序,MVC不支持类型验证程序的客户端验证,仅适用于属性验证程序。在他着名的博客文章ASP.NET MVC: Adding client-side validation to PropertiesMustMatchAttribute中,Stuart Leeks描述了如何实现使用客户端验证的 MustMatch 属性验证器,并可用于确保两个属性匹配,例如:用于密码确认。