2016-09-12 10 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

関連する問題