多个字段的NotEmpty验证

时间:2019-06-18 12:01:00

标签: asp.net-mvc fluentvalidation

我有一个带有一些NotEmpty字段的表单。现在,我可以始终为每个字段编写一条规则,并为每个字段编写相同的消息。我希望有一种更好的方法来编写它。也许将其写成一行,然后列出所有字段。

我尝试了下面的代码,但是似乎没有用,我什至不确定这是否接近答案。我到处搜索,但似乎找不到示例。我也看过文档,没有运气。抱歉,如果答案很明显,那就是过去一个小时了。

RuleFor(x => new { x.FirstField, x.SecondField, x.ThirdField, x.FourthField }).NotEmpty().WithMessage("Field cannot be null");

1 个答案:

答案 0 :(得分:0)

该库不允许这样做。但是正如罗曼所说,您可以编写一个扩展名,如下所示:

public class MyAbstractValidator<T> : AbstractValidator<T>
{
    public IEnumerable<IRuleBuilderInitial<T, TProperty>> RuleForParams<TProperty>(params Expression<Func<T, TProperty>>[] expressions)
    {
        return expressions.Select(RuleFor);
    }
}

public static class RuleBuilderInitialExtensions
{
    public static void ApplyForEach<T, TProperty>(this IEnumerable<IRuleBuilderInitial<T, TProperty>> ruleBuilders, Action<IRuleBuilderInitial<T, TProperty>> action)
    {
        foreach (var ruleBuilder in ruleBuilders)
        {
            action(ruleBuilder);
        }
    }
}

public class CustomerValidator : MyAbstractValidator<Customer>
{
    public CustomerValidator()
    {
        RuleForParams(x => x.FirstField, x => x.SecondField, x => x.ThirdField).ApplyForEach(x => x.NotEmpty().WithMessage("Field cannot be null"));
    }
}