MVC必需的TagHelper与FluentValidation ASPNET Core一起使用

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我要保证MyPropertyBNotEmpty()

一切正常,除非在我的标签助手中,如您所见,我正在检查NotNullValidator或,NotEmptyValidator并且NotEmptyValidator始终存在,在这种情况下,它不会运行When(...条件,因为在呈现页面时,我确定MyPropertyA一片空白

也许我缺少什么?

谢谢

史蒂夫

小智 0

尝试这个 :

public MyValidator()
{

  RuleFor(x=> x.MyPropertyB).NotEmpty().When(x=>x.MyPropertyA != null);

}
Run Code Online (Sandbox Code Playgroud)