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 に答える