【问题标题】:Does a stored password Break the ASP.NET CompareValidator?存储的密码是否会破坏 ASP.NET CompareValidator?
【发布时间】:2020-12-10 16:06:51
【问题描述】:

我正在尝试为我的公司创建一个注册页面,因此我在表单上输入了密码和“重复密码”文本框,以及 CompareValidator。它似乎工作得很好,每当用户进入这两个字段时,输入数据并单击“注册/提交”按钮。

但是,我注意到一个问题,即我的 Firefox 浏览器在测试期间会保存我输入的密码。保存密码后,如果我再回到“新鲜”页面,它会显示密码已经填写在密码字段中(尽管由于某种原因不在“重复密码”字段中)。

无论如何,如果我随后填写电子邮件地址,我就可以毫无问题地单击注册/提交按钮!

最令人担忧的是,当我调试 CodeBehind 甚至通过手动触发控件的 Validate 方法和 Page 的 Validate 方法来强制验证时,它仍然以某种方式通过了验证,正如您在 QuickWatches 中看到的那样在我下面的屏幕截图中,这些字段有两个不同的值!

我是否发现了应该向 Microsoft 报告的错误,或者我在设置这一切时可能做错了什么?我所做的只是将CompareValidator 放在表单上,​​并将“ControlToCompare”设置为“txtUserPass”,将“ControlToValidate”设置为“txtRepeatPass”,并将操作设置为“Equal”。

我可能在这里做错了什么,还是我发现了由浏览器存储密码引起的真正错误?

【问题讨论】:

  • 您需要将[Required] 添加到您的string txtRepeatPass 属性中。因为值为空,[Compare] 不会触发。
  • 啊,谢谢@Catalin 我确实在我的表单上有一个单独的RequiredFieldValidator 用于重复密码,但是你的评论让我第二次看它,我发现它指向主密码字段而不是重复!所以我解决了这个问题,解决了这个问题!奇怪的行为虽然它仍然没有尝试将空白与另一个值进行比较......我认为你仍然想比较它们。您能否将您的评论作为答案,以便我将其标记为正确答案?

标签: c# asp.net .net validation


【解决方案1】:

根据documentation 的规定,CompareValidator 不会针对空值触发:

If the input control is empty, no validation functions are called and validation succeeds. 
Use a RequiredFieldValidator control to require the user to enter data in the input control.

您需要将CompareValidatorRequiredFieldValidator 结合起来。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 2014-11-25
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多