2016-09-12 51 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; } 
} 

現在,考慮醫師對象,移動和Office是必需的,但僅適用於移動需要的患者對象。如何根據給定條件打開/關閉驗證屬性行爲?

回答

0

聽起來像PhysicianPatient類需要決定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

相關問題