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);
}
}
}
答案 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; }
}