首页 > 解决方案 > 控件的 ASP.NET Core 条件验证

问题描述

例如,我的视图模型中有这 3 个属性

public class PageViewModel
{
            [Required]
            public bool? HasControl { get; set; }
            [Required] 
            public bool? Critical { get; set; }
            [Required]         
            public string Description { get; set; }
}

这里的问题是我想制作属性

Critical 
Description

如果 HasControl 为 true 则为必需,如果为 false 则不需要,这是一个单选按钮控件。

我尝试在客户端禁用控件,但在检查 Modelstate.IsValid 时它们仍然失败。

有没有办法处理这种情况?

标签: c#asp.net-coremodel-validation

解决方案


您需要实施IValidatableObject. 将验证检查放入Validate方法中。最后返回错误列表。

public class PageViewModel : IValidatableObject
{
    public bool? HasControl { get; set; }
    public bool? Critical { get; set; }
    public string Description { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        List<ValidationResult> errors = new List<ValidationResult>();
        if (HasControl == true)
        {
            if (Critical == null)
                errors.Add(new ValidationResult($"{nameof(Critical)} is Required.", new List<string> { nameof(Critical) }));

            if (string.IsNullOrWhiteSpace(Description))
                errors.Add(new ValidationResult($"{nameof(Description)} is Required.", new List<string> { nameof(Description) }));
        }
        return errors;
    }
}

推荐阅读