数据注释似乎在使用验证程序的值类型上无法正常工作

本文关键字:常工作 工作 类型 注释 程序 验证 数据 | 更新日期: 2023-09-27 18:31:01

为什么总是返回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; }    
    }

我的使用有什么问题??

数据注释似乎在使用验证程序的值类型上无法正常工作

int是一种

值类型,永远不能null

一个new Person()将有一个0 Id,这将满足[Required]
通常,[Required]对值类型毫无用处。

要解决此问题,您可以使用可为空的int?

另一种选择是使用 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; }    
}