2012-04-11 36 views
0

爲什麼總是返回true?DataAnnotations在使用驗證器的值類型中似乎無法正確運行

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

    } 

我的用法有什麼問題?

+0

@Erik Phillips:感謝編輯標題......現在更有意義 – Perpetualcoder 2012-04-12 15:50:03

回答

7

int是一個值類型,永遠不可能是null

A new Person()將具有Id0,其將滿足[Required]
一般而言,[Required]在值類型上是無用的。

要解決此問題,您可以使用空值int?

+0

@gdoron:你是對的;我的意思是'Id'。 – SLaks 2012-04-12 00:01:03

0

另一種選擇是使用RangeAttribute。當Id爲< 1時,這應該是錯誤的。

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

    public decimal Age { get; set; }  

}