DataAnnotations tryvalidateobject始终返回true

时间:2015-04-20 09:09:54

标签: c# data-annotations

namespace ClassValidation
{
    public class Student
    {
        [Required(ErrorMessage = "Name is required")]
        public String Firstname;


        [Required(ErrorMessage = "Email is required")]
        public String personalEmail;


            }
}


private static void Main(string[] args)
        {

            Student student = new Student();
            student.personalEmail = "del";


            ValidationContext context = new ValidationContext(student, null, null);
            List<ValidationResult> results = new List<ValidationResult>();
            bool valid = Validator.TryValidateObject(student, context, results, true);

            if (!valid)
            {
                foreach (ValidationResult vr in results)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("   ::  {0}{1}", vr.ErrorMessage, Environment.NewLine);

                }

            }
        }

2 个答案:

答案 0 :(得分:6)

验证程序忽略字段上的[RequiredAttribute] - 它只占用一个帐户属性;因此,出于Validator.Validate的目的,请将您的班级更改为:

public class Student
{
  [Required(ErrorMessage = "Name is required")]
  public String Firstname { get; set; }


  [Required(ErrorMessage = "Email is required")]
  public String personalEmail { get; set; }
}

答案 1 :(得分:3)

如果您深入了解验证器来源,您会注意到TryValidateObject只会验证属性,而不会验证字段。更具体地说,您会注意到它使用了GetObjectPropertyValidationErrors(省略了字段)。

我认为没有任何理由让你在这里使用公共字段,因此最简单的解决方法是使用属性

public class Student
{
    [Required(ErrorMessage = "Name is required")]
    public string FirstName { get; set; }

    [Required(ErrorMEssage = "Email is required")]
    public string PersonalEmail { get; set; }
}