【发布时间】:2020-01-05 13:07:17
【问题描述】:
我正在尝试在需要验证并具有 FluentValidation 提供的验证元数据的表单字段上自动呈现一个红色小星号。
我已经完成了 50%,但是使用 When(.... 子句会导致一些问题。
一个简化的例子是: 标签助手
public class NjordInputTagHelper : TagHelper
{
public override void Process(
TagHelperContext context,
TagHelperOutput output)
{
IValidator validator = _factory.GetValidator(For.Metadata.ContainerType);
if (validator == null)
{
return;
}
IValidatorDescriptor description = validator.CreateDescriptor();
IEnumerable<IPropertyValidator> propertyValidators = description.GetValidatorsForMember(For.Metadata.PropertyName);
if ((For.Metadata.ModelType != typeof(bool) && For.Metadata.IsRequired )
//|| propertyValidators.Any(p=> p is NotNullValidator || p is NotEmptyValidator )
)
{
//insert asterisk
}
}
}
我的验证器
public class MyValidator: AbstractValidator<MyModel>
{
public MyValidator()
{
When(x=>x.MyPropertyA != null, () =>
{
RuleFor(x=> x.MyPropertyB).NotEmpty();
})
}
}
基本上,我试图仅在条件为真时启用某些验证。所以当MyPropertyA != null 我想确保MyPropertyB 是NotEmpty()
一切正常,除非在我的标签助手中,如您所见,我正在检查 NotNullValidator 或 NotEmptyValidator 并且 NotEmptyValidator 始终存在,在这种情况下,它不会运行 @ 987654330@ 条件,因为在呈现页面时,我确定 MyPropertyA 为空
也许我错过了什么?
谢谢
史蒂夫
【问题讨论】:
标签: c# asp.net-mvc .net-core fluentvalidation