具有相同ViewModel的操作的不同DataAnnotations

时间:2011-06-23 18:06:56

标签: 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]
    public string Title {get;set;}

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

1 个答案:

答案 0 :(得分:0)

根据您如何区分两种类型的模型,您可以使用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种模型的枚举。