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

问题描述:

我一直在试图弄清楚,但我没有运气。我有一个有两个属性的模型:PasswordConfirmPasswordHtml.PasswordFor()不显眼的字段验证

如果我在视图中显示这些文本框(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> 
} 

如果有人能够帮助那么这将是非常赞赏。

非常感谢!

+0

也许这是浏览器中的一些安全设置,它会阻止阅读paswords的JavaScript?你正在使用哪种浏览器? – Richard 2013-04-12 07:57:24

+0

嗨@Stony,对于迟到的回复感到抱歉。我使用的是Firefox和Chrome,两者都有相同的问题。我试图在这两种浏览器中寻找这样的设置,但找不到任何东西 - 是否存在这样的设置?谢谢! – pkunal7 2013-04-18 11:33:41

+0

对不起,这只是基于回忆阅读关于如何让Javascript读取密码不安全的猜测,因为它让您容易受到攻击。 – Richard 2013-04-18 11:48:45

虽然我们没有找到这个问题的根本原因,但我们想出了一个解决方法。

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

同样,您也可以在keyUp()函数中执行此操作。

这是强制验证,但如果有人可以想出一个真正的原因,为什么我们可能遇到这个问题,我会非常感兴趣的听到它。