3

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

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

看来图书馆里应该已经有类似的东西了。我只是错过了吗?
我在 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; }
}
4

3 回答 3

3

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

public override bool IsValid(object value) {
    string valueAsString = value as string;
    return String.IsNullOrEmpty(valueAsString) || valueAsString.Length >= _minCharacters);
}
于 2011-07-24T23:30:16.120 回答
3

这适用于 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; }
于 2013-05-02T17:36:48.950 回答
1

您可以创建新的自定义验证属性

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

并修改您的代码如下:

[MyCustomValidation(ErrorMessage = "")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }
于 2011-07-24T23:52:37.770 回答