我是使用DataAnnotations进行验证的新手。我在控制台应用程序中使用它,所以不是ASP / MVC等。
public class Phone
{
[Required]
public string Mobile { get; set; }
[Required]
public string Office { get; set; }
}
public class Physician
{
[Required]
public Phone ContactPhone { get; set; }
}
public class Patient
{
[Required]
public Phone ContactPhone { get; set; }
}
现在,考虑一个Physician对象,需要Mobile和Office,但是对于Patient对象,只需要Mobile。如何根据给定条件打开/关闭验证属性行为?
答案 0 :(得分:0)
听起来Physician
和Patient
类需要决定Phone
类内部和不需要的内容。我们可以通过首先避免注释来代替使用IValidatableObject
接口。 Validator
类还将检查此接口是否有任何其他验证。
public class Phone
{
// no more required attributes here
public string Mobile { get; set; }
public string Office { get; set; }
}
public class Physician : IValidatableObject
{
[Required]
public Phone ContactPhone { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(string.IsNullOrWhiteSpace(ContactPhone.Mobile))
{
yield return new ValidationResult("Mobile number is required");
}
if (string.IsNullOrWhiteSpace(ContactPhone.Office))
{
yield return new ValidationResult("Office number is required");
}
}
}
public class Patient : IValidatableObject
{
[Required]
public Phone ContactPhone { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrWhiteSpace(ContactPhone.Mobile))
{
yield return new ValidationResult("Mobile number is required");
}
}
}