Проверить длину пароля с помощью атрибута, который также принимает пустой?
Я хотел бы проверить длину пароля при редактировании, если пароль введен, в противном случае следует считать пустым все в порядке.
Я видел предложения пропустить атрибут для пароля в модели редактирования и выполнить проверку в коде, но я хочу использовать атрибуты для всей проверки.
Кажется, что-то подобное уже должно быть в библиотеке. Я просто пропустил это?
Я использую EntLib 5 VAB и MVC 2 на AspNet 3.5.
Ваниль редактировать модель:
[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 ответа
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);
}
Это работает с 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; }
Вы можете создать новый пользовательский атрибут проверки.
Public Class MyCustomValidation : RegularExpressionAttribute
{
public MyCustomValidation() : base([Your regular expression])
{}
}
И измените ваш код, как показано ниже:
[MyCustomValidation(ErrorMessage = "")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }