有条件地转 on/off DataAnnotation 属性 验证
Conditionally turn on/off DataAnnotation property validation
我不熟悉使用 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 是必需的。我怎样才能根据给定条件转变 on/off 验证属性行为?
听起来 Physician
和 Patient
classes 需要决定在 Phone
class 中什么是必需的,什么不是必需的。我们可以通过首先避免注释来实现这一点,而是使用 IValidatableObject
接口。 Validator
class 还将检查此接口以进行任何其他验证。
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");
}
}
}
我不熟悉使用 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 是必需的。我怎样才能根据给定条件转变 on/off 验证属性行为?
听起来 Physician
和 Patient
classes 需要决定在 Phone
class 中什么是必需的,什么不是必需的。我们可以通过首先避免注释来实现这一点,而是使用 IValidatableObject
接口。 Validator
class 还将检查此接口以进行任何其他验证。
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");
}
}
}