【发布时间】:2010-04-19 06:26:39
【问题描述】:
我正试图弄清楚如何在我的应用程序中的一个位置为我的域对象定义验证规则,但遇到了障碍......
一些背景:我的应用程序有几个部分: - 数据库 - 达尔 - 业务逻辑层 - SOAP API 层 - MVC 网站
MVC 网站通过 SOAP API 访问数据库,就像第三方一样。我们在 MVC 网站以及 SOAP API 层中使用服务器端和客户端验证。
为了避免手动编写客户端验证,我们结合 Html.TextBoxFor 和 Html.ValidationMessageFor HTML 帮助器实现强类型视图,如步骤 3 here 所示。我们还为每个表单创建自定义模型,其中一个表单接受多个域对象的输入。
这就是问题开始的地方,HTML 助手从模型中读取数据注释验证属性。在大多数情况下,我们的表单处理多个域对象,您不能在 " %> 页面中指定多个类型指示。所以我们不得不创建一个自定义模型类,这意味着将域对象中的验证属性复制到模型类中。
我花了相当长的时间寻找解决方法,例如从域类和自定义 MVC 模型中引用相同的 MetadataType,但由于以下几个原因这不起作用:
每个类只能指定一个 MetadataType 属性,因此如果模型引用多个域对象,每个域对象都有自己的元数据类型,则会出现问题。
如果模型类不包含在引用的 MetadataType 中指定的属性,则数据注释验证代码将引发异常,这是模型仅处理给定域的属性子集的问题对象。
我也查看了其他解决方案,但无济于事。如果有人对如何实现跨 MVC 客户端和服务器端验证功能以及其他位置(例如我的 SOAP API)的验证逻辑的单一来源有任何想法,我很想听听!
提前致谢,
马修
【问题讨论】:
标签: asp.net-mvc validation dry