0

为什么这总是返回true?

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

    }

我的用法有什么问题?

4

2 回答 2

7

int是一个值类型,永远不可能是null.

Anew Person()将有一个Idof 0,它将满足[Required]
一般来说,[Required]对值类型是无用的。

要解决此问题,您可以使用 nullable int?

于 2012-04-11T23:56:17.847 回答
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; }    

}
于 2012-04-12T00:23:42.160 回答