加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用Fluent验证进行不显眼的自定义/条件验证

发布时间:2020-12-16 07:45:23 所属栏目:asp.Net 来源:网络整理
导读:我正在寻找一种方法来为Fluent验证实现不显眼的自定义验证.根据 documentation,它似乎并不表示它支持不显眼的验证. 同样适用于使用条件验证(When/Unless).我在他们的MVC documentation中看到,条件和其他复杂验证不支持不显眼的验证: Note that FluentValida
我正在寻找一种方法来为Fluent验证实现不显眼的自定义验证.根据 documentation,它似乎并不表示它支持不显眼的验证.

同样适用于使用条件验证(When/Unless).我在他们的MVC documentation中看到,条件和其他复杂验证不支持不显眼的验证:

Note that FluentValidation will also work with ASP.NET MVC’s client-side validation,but not all rules are supported. For example,any rules defined using a condition (with When/Unless),custom validators,or calls to Must will not run on the client side. The following validators are supported on the client:

*NotNull/NotEmpty
*Matches (regex)
*InclusiveBetween (range)
*CreditCard
*Email
*EqualTo (cross-property equality comparison)
*Length

那么有没有人想出如何让这个工作?如果没有,是否有其他验证选项可以为不引人注目的自定义/复杂验证提供更好的支持?

解决方法

通过遵循 Integration with ASP.NET MVC文档,我成功地将FluentValidation插入到ASP.NET MVC 3中.

简单的方法是将FluentValidation插入Global.asax Application_Start()中的MVC验证框架,如下所示:

FluentValidationModelValidatorProvider.Configure();

然后,您可以使用属性修饰POCO类,指定它们使用的验证器.

[Validator(typeof(PersonValidator))]
public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}

在我的情况下,我不想这样做(使用属性),实际上需要针对不同的Validator验证相同的POCO类,具体取决于业务规则.

如果您想以这种方式选择不同的验证器,请按照“custom validator factory with an IoC container”上的文档进行操作.创建一个类FluentMvcValidatorFactory子类化ValidatorFactoryBase,它实现接口IValidatorFactory.自定义验证器工厂可以处理选择适当的验证器.

我试图让客户端验证工作(确实如此),但它似乎也插入了不显眼的验证.我的html输出如下:

<input type="text" value="" name="Email" id="Email" data-val-length-max="128" data-val-length="&amp;#39;Email&amp;#39; must be between 0 and 128 characters." data-val-email="&amp;#39;Email&amp;#39; is not a valid email address." data-val="true" class="text-box single-line">

只要你正确地将它插入MVC,我认为不引人注意应该工作.

在实践中,您不应完全依赖客户端或不显眼的验证,只能在输入期间使用它来帮助用户.最终服务器需要验证,但您可以让服务器端代码使用相同的FluentValidation验证器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读