【发布时间】:2010-12-06 05:15:39
【问题描述】:
我在 ASP.NET MVC 2 中广泛使用 Data Annotation 验证。这个新功能节省了大量时间,因为我现在能够在一个地方定义客户端验证和服务器端验证.然而,当我做一些详细的测试时,我意识到如果我单独依赖数据注释验证,那么有人很容易绕过服务器端验证。例如,如果我通过使用 [Required] 属性注释属性来定义一个必填字段,并在表单中为该必填字段放置一个文本框,用户可以简单地从 DOM 中删除该文本框(这可以通过 Firebug 轻松完成)现在,在 Controller 内部的 ModelBinding 期间,不会在该属性上触发 Data Annotation 验证。为确保触发“必需”验证,我可以在 ModelBinding 发生后重复验证,但随后我会重复验证逻辑。
大家对验证有什么建议?数据注释验证是否足够?还是需要重复验证以确保在所有情况下都能触发验证?
后续评论: 根据下面的答案,我似乎不能单独依赖模型绑定器和数据注释验证。由于我们得出的结论是需要额外的服务器端验证,我的服务层是否有一种简单的方法可以根据数据注释中定义的内容触发验证?看来这会让我们两全其美……我们不需要重复验证代码,但即使 Model Binder 没有触发验证,我们仍然会确保执行验证。
我将把这个后续评论作为一个单独的问题发布,因为它提出的问题与原来的问题不同。
【问题讨论】:
-
Koritnik 的回复回答了您的后续查询。我的验证类似于他发布的回复。相同的 DataAnnotation 定义可用于服务器和客户端验证。
-
如果提供的验证属性和框架本身适合您,则数据注释验证很好。由于社区反馈,ASP.NET MVC 2 RTM 的Required 行为已更改,因此 [Required] 现在可以按预期工作。可选地,查看:Validation Block (Enterprise Library)、xVal、NHibernate Validators(据说不依赖于 NHibernate ORM)。
-
"I'm going to post this follow-up comment as a separate question, as it poses a different question than the original one."链接到那不是一个坏主意,嗯?
标签: asp.net-mvc validation asp.net-mvc-2 data-annotations