将FluentValidation与以编程方式生成的AbstractValidator模型一起使用

时间:2019-07-22 18:13:47

标签: validation asp.net-core fluentvalidation blazor fluentvalidation-2.0

我试图查看是否有一种方法可以使用FluentValidation,而无需为我的应用程序中的每种对象类型显式创建验证模型。

在技术上和目前可行吗?

注意:这个问题可能最终将我引向实现通用lambda表达式的技术性问题。

示例:

对于基本的,即需即用的验证规则,lambda表达式在p.Name上进行显式验证。但是,如果我的模型是通用类型T,那么如何为该验证器的属性(任何给定的属性字符串名称)进行验证?

  

RuleFor(p => p.Name )。NotEmpty()。WithMessage(“您必须输入名称”);

1 个答案:

答案 0 :(得分:0)

我能够通过采取一种破解解决方案来解决。这是我所做的基本细节:

  1. 我创建了一个类(GenericModel),该类具有表示模型属性的对象的集合。

  2. 我创建了一个继承自AbstractValidator的验证器类。

  3. 基于GenericModel的“属性对象”集合以及有关每个属性的验证规则和错误消息的其他元数据,我能够在运行时添加FluentValues规则。

  4. 在EditForm上,我处理了OnSubmit事件。在该事件处理程序中,我通过FluentValidation的ValidateAsync()方法执行验证。

  5. 最后,我遍历验证结果,并使用适当的CSS,错误消息,突出显示...等更新每个字段。