我正在尝试在需要验证并具有 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
始终存在,在此上下文中,它不会运行 When(...
条件,因为在呈现页面时我确定 MyPropertyA
为 null
也许我遗漏了什么?
谢谢
史蒂夫
最佳答案
试试这个:
public MyValidator()
{
RuleFor(x=> x.MyPropertyB).NotEmpty().When(x=>x.MyPropertyA != null);
}
关于c# - MVC 需要 TagHelper 使用 FluentValidation ASPNET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757888/