DataAnnotations tryvalidateobject 总是 returns true
DataAnnotations tryvalidateobject always returns true
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);
}
}
}
验证器忽略字段上的 [RequiredAttribute]
- 它只考虑帐户属性;因此,为了 Validator.Validate
- 将您的 class 更改为:
public class Student
{
[Required(ErrorMessage = "Name is required")]
public String Firstname { get; set; }
[Required(ErrorMessage = "Email is required")]
public String personalEmail { get; set; }
}
如果深入研究验证器源代码,您会注意到 TryValidateObject
只会验证 属性 ,而不是字段。更具体地说,您会注意到它使用了 GetObjectPropertyValidationErrors(省略了字段)。
无论如何,我认为您没有真正的理由在这里使用 public 字段,因此最简单的解决方法是使用属性
public class Student
{
[Required(ErrorMessage = "Name is required")]
public string FirstName { get; set; }
[Required(ErrorMEssage = "Email is required")]
public string PersonalEmail { get; set; }
}
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);
}
}
}
验证器忽略字段上的 [RequiredAttribute]
- 它只考虑帐户属性;因此,为了 Validator.Validate
- 将您的 class 更改为:
public class Student
{
[Required(ErrorMessage = "Name is required")]
public String Firstname { get; set; }
[Required(ErrorMessage = "Email is required")]
public String personalEmail { get; set; }
}
如果深入研究验证器源代码,您会注意到 TryValidateObject
只会验证 属性 ,而不是字段。更具体地说,您会注意到它使用了 GetObjectPropertyValidationErrors(省略了字段)。
无论如何,我认为您没有真正的理由在这里使用 public 字段,因此最简单的解决方法是使用属性
public class Student
{
[Required(ErrorMessage = "Name is required")]
public string FirstName { get; set; }
[Required(ErrorMEssage = "Email is required")]
public string PersonalEmail { get; set; }
}