Html.PasswordFor()不显眼的字段验证

时间:2013-04-11 09:14:44

标签: asp.net-mvc passwords unobtrusive-validation model-validation

我一直试图解决这个问题,但我没有运气。我有一个包含两个属性的模型:PasswordConfirmPassword

如果我在视图中将它们显示为TextBoxes(Html.TextBoxFor(...)),那么验证工作正常。但是,如果我将这些显示为密码字段(Html.PasswordFor(...)),则在提交表单之前验证不起作用。

以下是我的视图和模型的代码。请注意,视图只是一个测试视图,我没有在其上放置提交按钮。 型号:

public class TestViewModel
{
    [Required(ErrorMessage = "Password is required")]
    [StringLength(40, ErrorMessageResourceType = typeof(Resources.Shared_Editor_SecurityDetails), ErrorMessageResourceName = "PasswordLength")]
    public string Password { get; set; }

    [Required(ErrorMessage = "Confirm is required")]
    [Compare("Password", ErrorMessage = "Must be the same as Password")]
    public string ConfirmPassword { get; set; }
}

查看:

@using (Html.BeginForm())
{
<div>
    @Html.LabelFor(m => m.Password)
    @Html.PasswordFor(m => m.Password)
    @Html.ValidationMessageFor(m => m.Password)
</div>

<div>
    @Html.LabelFor(m => m.ConfirmPassword)
    @Html.PasswordFor(m => m.ConfirmPassword)
    @Html.ValidationMessageFor(m => m.ConfirmPassword)
</div>
}

如果有人能够提供帮助,那将非常感激。

非常感谢!

1 个答案:

答案 0 :(得分:1)

虽然我们没有找到问题的根本原因,但我们已经提出了一种解决方法。

我们使用jquery和字段id为每个密码字段设置一个在blur()上触发的函数。在此功能中,我们执行$(this).valid()$('#idOfField').valid()

同样您也可以在keyUp()功能中执行此操作。

这迫使验证,但如果有人能够提出我们为什么遇到这个问题的实际原因,我会非常感兴趣听到它。