【问题标题】:Optional Validation for Change Password in ASP.NET MVCASP.NET MVC 中更改密码的可选验证
【发布时间】:2012-11-20 14:17:45
【问题描述】:

我有以下型号

public AccountInfo {

    // loads of other property here as well.

    public string Password { get; set; }

    public string NewPassword { get; set; }

    [Compare("NewPassword", ErrorMessage = "New Passwords dont match.")]
    public string ConfirmNewPassword { get; set; }

}

我正在使用数据注释来显示客户端验证消息。

现在我正在处理更改用户个人资料详细信息页面。

我需要做的是,连同电子邮件、全名、地址等其他详细信息,我必须显示 3 个字段,即

  • 当前密码
  • 新密码
  • 确认新密码

现在的情况是这些是可选字段,用户可能不会填写它。但是当他这样做时,我想确保所有 3 个字段都已填写。,如果没有,我想使用数据注释显示一些验证错误。

有什么想法吗?

【问题讨论】:

标签: asp.net-mvc validation asp.net-mvc-4 data-annotations


【解决方案1】:

没有任何内置的数据注释。您可以创建自定义属性来进行验证,但这并不容易。因此,我建议您使用 Jquery Validation / Javascript 来处理这个问题。

基本上你会想要覆盖提交事件并在那里做你自己的验证逻辑。您的代码将与此类似:

function SubmitToServer() { 
    if ($('#Password').length == 0 || ($('#Password').length > 0 && $('#NewPassword ').length > 1 && $(formId).valid()) {
        $(formId).submit();
    }
}

【讨论】:

  • 使用 jquery 进行客户端验证。
【解决方案2】:

您可以使用[Required] 告诉 RAZOR 这些是必须的或强制性的......

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

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

 [Required]
 [Compare("NewPassword", ErrorMessage = "New Passwords dont match.")]
 public string ConfirmNewPassword { get; set; }

如果你想提供值的范围意味着使用这个 - [Range(1, 100)]

如果你想使用密码长度意味着使用这个 - [StringLength(5)]

【讨论】:

  • 感谢您的回答,但这不是我想要的。请再次阅读问题。我想确保所有 3 个字段都已填写,即使其中一个已填写并且它们也可以全部为空。
猜你喜欢
  • 2014-09-07
  • 2014-02-03
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多