Проверить длину пароля с помощью атрибута, который также принимает пустой? - PullRequest
3 голосов
/ 25 июля 2011

Я хотел бы проверить длину пароля при редактировании , если пароль введен в противном случае пустое значение следует считать нормальным.

Я видел предложения пропустить атрибут для пароля в модели редактирования.и выполнить проверку в коде, но я хочу использовать атрибуты для всей проверки.

Кажется, что-то подобное уже должно быть в библиотеке.Я просто пропустил это?
Я использую EntLib 5 VAB и MVC 2 в AspNet 3.5.

Модель редактирования Vanilla:

[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 ]

3 голосов
/ 25 июля 2011

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);
}
2 голосов
/ 02 мая 2013

Это работает с 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; }
1 голос
/ 25 июля 2011

Вы можете создать новый пользовательский атрибут проверки .

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

И измените свой код, как показано ниже:

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