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

标签 asp.net-mvc asp.net-mvc-3 unobtrusive-validation fluentvalidation

我正在寻找一种方法来为 Fluent Validation 实现不显眼的自定义验证。根据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; }
}

就我而言,我不想这样做(使用属性),实际上需要针对不同的验证器验证相同的 POCO 类,具体取决于业务规则。

如果您想以这种方式选择不同的验证器,请遵循“custom validator factory with an IoC container”上的文档。创建类 FluentMvcValidatorFactory 子类化 ValidatorFactoryBase,实现接口(interface) 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 验证器。

关于asp.net-mvc - 使用 Fluent Validation 进行不显眼的自定义/条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954617/

相关文章:

css - 文本框的 MVC4 图形验证

c# - 无法对空引用执行运行时绑定(bind),但它不是空引用

asp.net-mvc-3 - 更改 asp.net-mvc-3 中不显眼的验证行为

c# - 从巨大的数据库表中读取

asp.net-mvc-3 - 是否可以在将 razor View 引擎的输出发送到客户端之前修改它?

c# - 需要对 MVC3 应用程序进行哪些更改才能发送电子邮件?

asp.net-mvc - 为 FileResult 设置 ETag - MVC 3

Jquery 不引人注目的验证工作速度非常慢 ASP.Net MVC3

c# - 使用相同形式的 .net 身份注册多个用户

c# - 如何在 Global.asax.cs 文件中全局声明 Filter 属性