Jer*_*ose 6 asp.net-mvc fluentvalidation unobtrusive-validation asp.net-mvc-3
我正在寻找一种方法来为Fluent验证实现不显眼的自定义验证.根据文档,它似乎并不表示它支持不显眼的验证.
同样适用于使用条件验证(When/unless).我在他们的MVC文档中看到,条件和其他复杂验证不支持不显眼的验证:
请注意,FluentValidation也适用于ASP.NET MVC的客户端验证,但并非所有规则都受支持.例如,使用条件(使用When/unless),自定义验证程序或对Must的调用定义的任何规则都不会在客户端运行.客户端支持以下验证器:
*NotNull/NotEmpty
*匹配(正则表达式)
*InclusiveBetween(范围)
*CreditCard
*电子邮件
*EqualTo(跨属性相等比较)
*长度
那么有没有人想出如何让这个工作?如果没有,是否有其他验证选项可以为不引人注目的自定义/复杂验证提供更好的支持?
我已按照与 ASP.NET MVC 的集成成功地将 FluentValidation 插入到 ASP.NET MVC 3。
简单的方法是将 FluentValidation 插入 Global.asax Application_Start() 中的 MVC 验证框架,如下所示:
FluentValidationModelValidatorProvider.Configure();
Run Code Online (Sandbox Code Playgroud)
然后你可以用属性来装饰你的 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; }
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我不想这样做(使用属性),实际上需要根据业务规则针对不同的验证器验证相同的 POCO 类。
如果您想以这种方式选择不同的验证器,请按照“带有 IoC 容器的自定义验证器工厂”上的文档进行操作。创建一个继承 ValidatorFactoryBase 的 FluentMvcValidatorFactory 类,该类实现 IValidatorFactory 接口。自定义验证器工厂可以选择合适的验证器。
我试图让客户端验证工作(它做到了),但它似乎也插入了不引人注目的验证。我的 html 输出如下:
<input type="text" value="" name="Email" id="Email" data-val-length-max="128" data-val-length="&#39;Email&#39; must be between 0 and 128 characters." data-val-email="&#39;Email&#39; is not a valid email address." data-val="true" class="text-box single-line">
Run Code Online (Sandbox Code Playgroud)
只要你正确地将它插入到 MVC 中,我认为 unobtrusive 应该可以工作。
在实践中,您不应完全依赖客户端或不引人注目的验证,仅将其用于在输入过程中协助用户。最终服务器需要进行验证,但您可以让服务器端代码使用相同的 FluentValidation 验证器。
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |