2011-06-23 9 views
0

これらの2つのViewModelを1つにマージし、アクションごとに異なる検証(クライアントとサーバー)を実行するにはどうすればよいですか?草稿を保存するときはObserve Descriptionは必要ありませんが、アナウンスするときはDescriptionです。これを行うには、次のように同じ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を使用することができます。

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

は、モデルの2種類を定義する列挙型です。

+0

Lester、クライアント側ではどのように動作しますか? – Eduardo

+0

クライアント側の検証も頼まれていました。私が提案したソリューションは、サーバー側の検証のみを実行します。私はカスタムJavaScriptコード以外のこれを行う最もクリーンな方法は何か分かりません。 – Lester

関連する問題