ASP.NET 控件的核心条件验证

ASP.NET Core Conditional Validation for controls

例如,我的视图模型中有这 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 时它们仍然失败。

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

您需要实施 IValidatableObject。将验证检查放在 Validate 方法中。 return错误列表在最后。

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