7

通常、ASP.NET MVC 3 メンバーシップ用に生成されるコード、特にNewPasswordクラスのプロパティは、ChangePasswordModelおおよそ次のようになります。

    [Required]
    [StringLength(100, MinimumLength=6)]
    [DataType(DataType.Password)]
    [Display("Name = CurrentPassword")]
    public string NewPassword { get; set; }

私が使用している外部パラメータでいくつかの情報を埋めるためにRecourceType:
(この場合、私はリソースからのいくつかの追加データでOldPassword属性を変更して埋めていますDisplay

    [Required]
    [DataType(DataType.Password)]
    [Display(ResourceType = typeof(Account), Name = "ChangePasswordCurrent")]
    public string OldPassword { get; set; }

に戻るNewPasswordを に置き換えるにはどうすればよいですか? MinimumLenghtMembership.MinRequiredPasswordLength: 私の試み:

    [Required]
    [StringLength(100, MinimumLength=Membership.MinRequiredPasswordLength)] 
    [DataType(DataType.Password)]
    [Display(ResourceType=typeof(Account), Name= "ChangePasswordNew")]
    public string NewPassword { get; set; }

これにより、次のエラーが発生します。

属性引数は、属性パラメーター型の定数式、typeof 式、または配列作成式である必要があります ( http://msdn.microsoft.com/de-de/library/09ze6t76%28v=vs.90%29.aspx )

4

1 に答える 1

4

検証属性は、コンパイルされた定数でなければなりません (エラー メッセージの状態など)。この最小の長さを処理する独自の ValidationAttribute を作成できます。

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class ValidatePasswordLengthAttribute : ValidationAttribute
{

    private const string DefaultErrorMessage = "'{0}' must be at least {1} characters long.";

    private readonly int _minCharacters = Membership.Provider.MinRequiredPasswordLength;
    public ValidatePasswordLengthAttribute() : base(DefaultErrorMessage)
    {
    }

    public override string FormatErrorMessage(string name)
    {
        return string.Format(CultureInfo.CurrentUICulture, ErrorMessageString, name, _minCharacters);
    }

    public override bool IsValid(object value)
    {
        var valueAsString = value.ToString();
        return (valueAsString != null) && (valueAsString.Length >= _minCharacters);
    }
}

次に、ビューモデルは次のようになります (さらに凝って、ValidatePasswordLength 属性に DataAnnotations の最大長部分を追加して、その行を削除することもできます)。

[Required]
[StringLength(100)] 
[DataType(DataType.Password)]
[Display(ResourceType=typeof(Account), Name= "ChangePasswordNew")]
[ValidatePasswordLength]
public string NewPassword { get; set; }
于 2013-08-28T13:29:39.403 に答える