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; } 
} 

答えて

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); 
} 
+0

優秀!ありがとうございました! :) –

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; } 
1

をこれはMVC4とjQuery 1.8で動作します。

要件は最小9文字、特殊文字1および1桁、パスワードには大文字1桁が必須です。

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