gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:48:58 25 4
gpt4 key购买 nike

我正在尝试在需要验证并具有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com