c# - MVC 需要 TagHelper 使用 FluentValidation ASPNET Core

标签 c# asp.net-mvc .net-core fluentvalidation

我正在尝试在需要验证并具有 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 我想确保 MyPropertyBNotEmpty()

一切正常,除了在我的标签助手中,如您所见,我正在检查 NotNullValidatorNotEmptyValidatorNotEmptyValidator始终存在,在此上下文中,它不会运行 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/

相关文章:

c# - 如何在 ASP.NET Core 健康检查中注入(inject)依赖项

C# 反射在运行时创建接口(interface)

c# - 你如何在 dotnet core 中为 Nunit 测试设置可并行化属性?

c# - 有条件地在线程中使用锁?

C# - 使用 DataContractJsonSerializer 序列化常量

c# - 自动将 View 中的元素映射到 dateTime 类型的模型

C#:CommandLineParser 如何解析URL?

asp.net-mvc - DDD原理与ASP.NET MVC项目设计

c# - System.Web.Http.Owin WebApi2 安装问题

asp.net-mvc - Mvc 3 Razor : Using Sections for Partial View?