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;
}
}
例如,我的视图模型中有这 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;
}
}