使用也接受空的属性验证密码长度?

时间:2011-07-24 23:13:07

标签: c# asp.net-mvc validation attributes validation-application-bl

我想在编辑时验证密码长度如果输入密码,否则应该认为是空的。

我已经看到过在编辑模型中跳过密码属性并在代码中进行验证的建议,但我想使用属性进行所有验证。

似乎应该在库中存在这样的东西。我只是错过了吗? 我在AspNet 3.5上使用EntLib 5 VAB和MVC 2。

香草编辑模型:

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class EditAccountModel
{
    public Guid ProviderUserKey { get; set; }

    [Required]
    [DisplayName("User name")]
    public string UserName { get; set; }

    [Required]
    [Email(ErrorMessage = "Not a valid email")]
    [DataType(DataType.EmailAddress)]
    [DisplayName("Email address")]
    public string Email { get; set; }

    //[ValidatePasswordLength] <- Requires password
    [DataType(DataType.Password)]
    [DisplayName("Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [DisplayName("Confirm password")]
    public string ConfirmPassword { get; set; }
}

3 个答案:

答案 0 :(得分:3)

ValidatePasswordLengthAttribute不是MVC核心的一部分,而是在您的项目中从默认的MVC项目模板在AccountModels.cs中创建的。您可以自由修改其实现。将IsValid方法更改为接受null,将空字符串更改为有效值。

public override bool IsValid(object value) {
    string valueAsString = value as string;
    return String.IsNullOrEmpty(valueAsString) || valueAsString.Length >= _minCharacters);
}

答案 1 :(得分:2)

这适用于MVC4和jQuery 1.8。

要求密码中必须包含最少9个字符长度,1个特殊字符和1个数字以及1个大写字母。

[DisplayName("Password")]
[RegularExpression(@"^.*(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*\(\)_\-+=]).*$", ErrorMessage = "User_Password_Expression")]
[StringLength(20, MinimumLength = 9,  ErrorMessage = "length err")]
[DataType(DataType.Password)]
public override sealed string Password { get; set; }

答案 2 :(得分:1)

您可以创建新的custom validation attribute

Public Class MyCustomValidation : RegularExpressionAttribute
{
   public MyCustomValidation() : base([Your regular expression])
   {} 
}

修改您的代码如下:

[MyCustomValidation(ErrorMessage = "")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }