2011-06-23 20 views
0

如何將這兩個ViewModel合併爲一個併爲每個操作執行不同的驗證(客戶端和服務器)?保存草稿時不需要描述,但是在宣佈時不需要描述。使用相同ViewModel的操作的不同DataAnnotations

public class SaveDraftViewModel 
{ 
    [Required] 
    public string Title {get;set;} 

    public string Description {get;set;} 
} 

public class AnnounceViewModel 
{ 
    [Required] 
    public string Title {get;set;} 

    [Required] 
    public string Description {get;set;} 
} 

回答

0

取決於你如何2種型號區分,可以使用IValidatableObject如下做到這一點:

public class CombinedViewModel : IValidatableObject 
{ 
    [Required] 
    public string Title {get; set;} 

    public string Description {get; set;} 

    public ViewModelType Type {get; set;} 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     var results = new List<ValidationResult>(); 
     if (Type == ViewModelType.Announce) 
     { 
      results.Add(new ValidationResult("Description is required."); 
     } 
     return results; 
    } 
} 

哪裏ViewModelType是定義2種型號的枚舉。

+0

萊斯特,它如何在客戶端工作? – Eduardo

+0

糟糕,完全錯過了你所要求的客戶端驗證。我提出的解決方案只會執行服務器端驗證。我不確定自定義JavaScript代碼以外的最乾淨的方式。 – Lester

相關問題