2011-01-23 21 views
8

Ecco la mia classe di prova con le annotazioni di dati:StringLengthAttribute non sembra funzionare

class Test 
{ 
    [Required, StringLength(10)] 
    public string MyProperty { get; set; } 
} 

Ecco il mio programma di test di console:

class Program 
{ 
    static void Main(string[] args) 
    { 
    var test = new Test { 
     MyProperty = "this is way more than 10 characters and should fail." 
    }; 

    var context = new ValidationContext(test, null, null); 

    // No exception here! (why not?) 
    Validator.ValidateObject(test, context); 

    test.MyProperty = null; 

    // Exception here, as expected 
    Validator.ValidateObject(test, context); 
    } 
} 

Per qualche ragione, non ottengo un eccezione di validazione quando la lunghezza della stringa è troppo lunga. Ricevo un'eccezione di convalida (come previsto) quando imposto la proprietà su null e la ri-validazione. Qualche idea sul perché la mia annotazione sulla lunghezza della stringa non viene applicata?

risposta

19

È un po 'non intuitivo, ma cambiando

Validator.ValidateObject(test, context); 

a

Validator.ValidateObject(test, context, true); 

risolve il problema. Il terzo argomento è bool validateAllProperties. Non sono sicuro del motivo per cui l'attributo [Required] fosse stato applicato in precedenza mentre lo [StringLength] non lo era, ma almeno ora funziona tutto.

3

Grazie per aver postato questo. Ho postato un bug su Microsoft Connect per questo problema. Presumo che saltino erroneamente una proprietà System.String in quanto non è un tipo di valore perché non eseguono una convalida profonda/ricorsiva senza il parametro "validateAllProperties".

Ecco il link bug se siete interessati: https://connect.microsoft.com/VisualStudio/feedback/details/672247/system-componentmodel-dataannotations-validator-does-not-validate-stringlengthattribute-unless-validateallproperties-specified

Problemi correlati