我试图找出我怎么能在一个单一的位置定义的验证规则为我的域对象我的应用程序中,但已经到了阻碍跑......DRY验证与MVC2
一些背景:我的应用程序有几个部分: - 数据库 - DAL - 业务逻辑层 - SOAP API层 - MVC网站
的MVC网站访问通过SOAP API数据库,就像第三方会。我们在MVC网站以及SOAP API层中使用服务器和客户端验证。
为了避免必须手动编写客户端验证我们正在执行结合Html.TextBoxFor强类型视图和Html.ValidationMessageFor HTML辅助,如图步骤3 here。我们还为每个表单创建自定义模型,其中一个表单为多个域对象提供输入。
这是问题开始的地方,HTML助手从模型读取数据注释验证属性。在大多数情况下,我们的表单处理多个域对象,并且您无法在页面中指定多个类型... Inherits =“System.Web.Mvc.ViewPage <MvcApplication.Models.SomeModel>”%> page指示。所以我们不得不创建一个自定义模型类,这意味着将验证属性从域对象复制到模型类。
我花了相当长的一段时间寻找解决方法,此,这样的引用了来自域类和自定义MVC模式相同MetadataType,但不会有以下几个原因工作:
您只能为每个类指定一个MetadataType属性,因此如果模型引用多个域对象(每个域对象都有其自己的元数据类型),就会出现问题。
如果模型类不包含在引用的MetadataType中指定的属性,那么该模型只处理给定域对象的属性的子集。
我看过其他解决方案,但也无济于事。如果任何人有关于如何实现验证逻辑的单一来源的任何想法,可以跨MVC客户端和服务器端验证功能和其他位置(如我的SOAP API)工作,我很乐意听到它!
由于提前,
马修
这样做,谢谢! 在你的头像上有草莓面膜吗? :) – Matthew 2010-04-24 06:31:32
事实上它是!这是J!NX XD眼镜的草莓面膜 – 2010-04-24 08:26:53