2016-09-12 2 views
0

Я новичок в проверке с использованием DataAnnotations. Я использую это в консольном приложении, поэтому не ASP/MVC и т.д.Условное включение/выключение Проверка свойства DataAnnotation

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; } 
} 

Теперь рассмотрим для объекта врача, Mobile и офис требуется, однако для объекта пациента требуется только мобильный. Как я могу включить/отключить поведение атрибута проверки на основе данного условия?

ответ

0

Похоже, классыи 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"); 
     } 
    } 
} 
+0

Спасибо, что имеет больше смысла. – zorrinn

Смежные вопросы