ASP.NET MVC应该选择哪个验证库?

11

我正在尝试决定在一个新的ASP.NET MVC项目中采用哪种验证方法。(哇,有很多选项!)

该项目使用NHibernate,因此我首先考虑了NHibernate Validator(由于与NHibernate紧密集成)。然而,据我所见,这种紧密集成只有几个好处:

1)由NHibernate生成的DB模式将包括验证细节(例如列长度将设置为允许验证的最大值)。(但这对我来说并不是很有趣,因为我手动生成模式。)

2)如果您尝试保存不符合验证规格的数据,NHibernate将抛出异常。(在我的看来,这似乎相当冗余,因为在保存之前,假定数据已经通过您选择的任何机制进行验证。)

如果有更多关于NHibernate Validator的好处,请告诉我!

我已经阅读了一些其他库的内容,例如:

  • MS DataAnnotations
  • Castle Validator
  • 还有其他的?

我还考虑使用xVal从同一组规则提供客户端验证。然而,我听说ASP.NET MVC v2将包括类似于xVal的东西(与jquery集成)。这个新的包含功能会使其他一些功能变得冗余吗?

因此,我基本上是在询问人们在这里采取哪个方向的建议。我不想实现一个特定的方案,只是希望在另一个方案成为主导技术时将其撤出。

对你有用的是什么?您认为哪个选项具有/将具有优势?

谢谢!

4个回答

10

这看起来非常有趣,感谢您的发布。我稍后会更深入地了解一下 - 第一眼看起来它似乎非常适合业务规则验证。基本数据验证可能会更冗长,但不是什么大问题。您知道这个设置在国际化方面处理得如何吗? - UpTheCreek
对于国际化(i18n),您可以将所有消息放入资源文件中,并在WithMessage FluentValidation方法中使用它们。 - Darin Dimitrov
我接受了这个答案,因为这是一个我以前没有见过的库。它看起来不错,我现在正在研究如何实施它。 - UpTheCreek
达林,你有没有关于如何集成FluentValidation和jQuery Validation的信息可以分享吗?例如,使用相同的消息验证在客户端和服务器端都进行的规则会很好。 - Kenny Evitt

5

我喜欢 xVal

使用它可以非常容易地实现客户端和服务器端验证。此外,还支持对实体中的列(属性)进行验证。


谢谢。你使用了什么底层验证机制?Castle?数据注释? - UpTheCreek
1
不确定Misha是否使用,但我们使用xVal + DataAnnotations。我构建了一个T4生成器,它会发出我们的业务对象和DAL,并将适当的属性放在数据成员上。 - GalacticCowboy
DataAnnotations,说实话我只是选择了使用DataAnnotations,没有进行其他机制的调查,所以我不知道为什么一个机制会比另一个更好。 - Misha N.
让我担心数据注释的事情是微软目前没有提供运行程序。 xVal项目似乎提供了一个,但有一些注意事项:[来自运行代码注释的引用] 在提供的实例上运行与属性关联的每个ValidationAttribute,并返回与每个验证失败相关的ErrorInfo。注意:某些ValidationAttribute类型声称有效,即使它们不是 - 如果您打算依赖它,请确保该运行程序检测到这些特殊情况。幸运的是,其他验证运行程序……能够正确报告所有错误。 [/引用] - UpTheCreek

1

是的,在v2中那似乎会成为默认选择。我在想这是否只是他们遵循数据注释方面的MS方式,而不是真正的最佳实践。 - UpTheCreek

1

你可能对这个委托方法感兴趣。我也是因为我不喜欢xVal的想法(我目前使用的解决方案),而且它似乎没有考虑跨多个属性或不同类结构的复杂验证情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接