2012-04-11 5 views
0

Warum gibt das immer wahr zurück?DataAnnotations scheinen bei Werttypen mit einem Validator nicht korrekt zu funktionieren

class Program 
    { 
     static void Main(string[] args) 
     { 
      Person p = new Person(); 
      p.Age = 24; 

      ICollection<ValidationResult> results = new Collection<ValidationResult>(); 
      bool isValid = Validator.TryValidateObject(p, new ValidationContext(p, null, null), results); 

      Console.WriteLine("Valid = {0}",isValid); 

      foreach (var result in results) 
      { 
       Console.WriteLine(result.ErrorMessage); 
      } 

      Console.ReadKey(); 
     } 
    } 

    public class Person 
    { 
     [Required(ErrorMessage = "You have to identify yourself!!")] 
     public int Id { get; set; } 

     public decimal Age { get; set; }  

    } 

was ist falsch mit meiner Verwendung ??

+0

@Erik Phillips: Dank den Titel für die Bearbeitung ... macht jetzt mehr Sinn – Perpetualcoder

Antwort

7

int ist ein Werttyp und kann niemals null sein.

Eine new Person() wird eine Id von 0 haben, die [Required] erfüllt.
Im Allgemeinen ist [Required] für Werttypen nutzlos.

Um dies zu beheben, können Sie ein Nullable int? verwenden.

+0

@gdoron: Du hast Recht; Ich meinte 'Id'. – SLaks

0

Eine andere Möglichkeit ist die Verwendung des RangeAttribute. Dies sollte falsch sein, wenn Id < 1 ist.

public class Person 
{ 
    [Range(1, int.MaxValue, ErrorMessage = "You have to identify yourself!!")] 
    public int Id { get; set; } 

    public decimal Age { get; set; }  

} 
Verwandte Themen