Asp.net mvc 3 具有相同ViewModel的操作的不同DataAnnotation

Asp.net mvc 3 具有相同ViewModel的操作的不同DataAnnotation,asp.net-mvc-3,validation,viewmodel,Asp.net Mvc 3,Validation,Viewmodel,如何将这两个ViewModel合并为一个,并为每个操作执行不同的验证客户端和服务器?保存草稿时不需要遵守说明,但在宣布时需要遵守说明 public class SaveDraftViewModel { [Required] public string Title {get;set;} public string Description {get;set;} } public class AnnounceViewModel { [Required] pu

如何将这两个ViewModel合并为一个,并为每个操作执行不同的验证客户端和服务器?保存草稿时不需要遵守说明,但在宣布时需要遵守说明

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

根据您将如何区分这两种类型的模型,您可以使用以下方法来执行此操作:

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是定义两种模型类型的枚举。

Oops,完全忽略了您要求的客户端验证。我提出的解决方案将只执行服务器端验证。除了自定义javascript代码之外,我不确定最干净的方法是什么。