【问题标题】:Different DataAnnotations for actions with the same ViewModel具有相同 ViewModel 的操作的不同 DataAnnotations
【发布时间】:2011-06-23 18:06:55
【问题描述】:

如何将这两个 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;}
}

【问题讨论】:

    标签: asp.net-mvc-3 validation viewmodel


    【解决方案1】:

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

    【讨论】:

    • 糟糕,完全错过了您还要求进行客户端验证。我提出的解决方案只会执行服务器端验证。我不确定除了自定义 javascript 代码之外最干净的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2017-10-15
    • 2023-03-14
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多