2013-08-28 12 views
5

Il codice che è generalmente generato per un ASP.NET MVC 3 Membri, vi preoccupa la proprietà NewPassword della classe ChangePasswordModel appare grosso modo così: Usando il parametro per l'attributo StringLength

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

Al fine di colmare alcune informazioni con parametri esterni sto usando RecourceType:
(In questo caso sto cambiando OldPassword e riempire l'attributo Display con alcuni dati aggiuntivi da una risorsa

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

Torna a NewPassword. Come posso sostituire lo MinimumLenght con Membership.MinRequiredPasswordLength?: Il mio tentativo:

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

Questo produce l'errore: attributi

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

Come accennato nella Descrizione errore, non è possibile passare una variabile in Parametro minimo attributo lunghezza stringa. MA, ** [Potresti scrivere 'val.Length

+0

grazie. Ho appena esternalizzato la costante alla mia classe GlobalVariables e tutto andava bene. Questo sembra essere il modo più semplice –

risposta

2

convalida deve essere compilato costanti (come i vostri stati messaggio di errore). Puoi creare il tuo ValidationAttribute che gestisce questa lunghezza minima per te.

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

Allora il vostro modello di vista potrebbe essere la seguente (si potrebbe anche avere più fantasia e aggiungere la parte massima lunghezza dei vostri DataAnnotations nel ValidatePasswordLength attribuire a rimuovere quella linea)

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