Ste*_*tes 5 c# asp.net-mvc fluentvalidation .net-core
我正在尝试在需要验证并具有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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的验证人
public class MyValidator: AbstractValidator<MyModel>
{
public MyValidator()
{
When(x=>x.MyPropertyA != null, () =>
{
RuleFor(x=> x.MyPropertyB).NotEmpty();
})
}
}
Run Code Online (Sandbox Code Playgroud)
本质上,我试图仅在条件为真时才启用某些验证。所以,当MyPropertyA != null我要保证MyPropertyB是NotEmpty()
一切正常,除非在我的标签助手中,如您所见,我正在检查NotNullValidator或,NotEmptyValidator并且NotEmptyValidator始终存在,在这种情况下,它不会运行When(...条件,因为在呈现页面时,我确定MyPropertyA一片空白
也许我缺少什么?
谢谢
史蒂夫
小智 0
尝试这个 :
public MyValidator()
{
RuleFor(x=> x.MyPropertyB).NotEmpty().When(x=>x.MyPropertyA != null);
}
Run Code Online (Sandbox Code Playgroud)