2013-08-28 11 views
5

kod, który jest zwykle generowane przez ASP.NET MVC 3 Członkostwa, escpecially własnością NewPassword klasy ChangePasswordModel wygląda mniej więcej tak: Korzystanie parametr dla atrybutu StringLength

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

W celu wypełnienia pewne informacje z parametrów zewnętrznych używam RecourceType:
(W tym przypadku jestem zmieniając OldPassword i wypełnić atrybut Display z niektórych dodatkowych danych z zasobu

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

Powrót do NewPassword. Jak mogę zamienić MinimumLenght na Membership.MinRequiredPasswordLength?: Moja próba:

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

To daje błąd: atrybuty

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type (http://msdn.microsoft.com/de-de/library/09ze6t76%28v=vs.90%29.aspx)

+0

Jak wspomniano Opis błędu, nie można przekazać zmiennej w minimalnym parametrze String Length Attribute. ALE, ** [Mógłbyś napisać 'val.Length

+0

dzięki. Właśnie zlecam stałą dla mojej klasy GlobalVariables i wszystko było w porządku. Wydaje się, że jest to najłatwiejszy sposób –

Odpowiedz

2

Walidacja musi być skompilowany stałe (jak swoich stanów komunikatu o błędzie). Możesz utworzyć własną właściwość ValidationAttribute, która obsługuje tę minimalną długość.

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

Wtedy twój widok model mógłby wyglądać następująco (można nawet uzyskać bardziej wyszukane i dodać maksymalna długość części swojego DataAnnotations w ValidatePasswordLength przypisują usunąć tę linię)

[Required] 
[StringLength(100)] 
[DataType(DataType.Password)] 
[Display(ResourceType=typeof(Account), Name= "ChangePasswordNew")] 
[ValidatePasswordLength] 
public string NewPassword { get; set; } 
Powiązane problemy