【发布时间】:2010-01-13 20:19:34
【问题描述】:
当我开始使用xVal 进行客户端验证时,我只实现了将域模型对象用作视图模型或视图模型中这些对象的嵌入实例的操作方法。
这种方法在大多数情况下都可以正常工作,但在某些情况下,视图只需要显示和回发模型属性的子集(例如,当用户想要更新他的密码,而不是他的其余部分时)配置文件数据)。
一个(丑陋的)解决方法是在表单上为表单上不存在的每个属性设置一个隐藏的输入字段。
显然这里的最佳实践是创建一个自定义视图模型,它只包含与视图相关的属性并通过Automapper 填充视图模型。因为我只传输与视图相关的数据,所以它更干净,但它远非完美,因为我必须重复域模型对象上已经存在的相同验证属性。
理想情况下,我想通过 MetaData 属性将域模型对象指定为元类(这通常也称为“伙伴类”),但这不起作用,因为当元数据类具有视图模型上不存在的属性。
有什么优雅的解决方法吗?我一直在考虑破解 xVal 源代码,但到目前为止我可能还忽略了其他一些方法。
谢谢,
阿德里安
编辑: 随着 ASP.NET MVC 2 的到来,这不再只是一个与验证属性相关的问题,它也适用于编辑器和显示属性。
【问题讨论】:
-
我对此也很好奇——我最终只是对自定义视图模型进行了验证并将其移出我的域模型。
-
所以你一遍又一遍地重复验证属性?
-
我最终不必这样做,不。通常我没有多个页面(因此也没有视图模型)可以设置相同的值(比如一个人的名字)。极少数情况下,我必须这样做。
-
不幸的是,在我的项目中并非如此。例如,我有一个业务实体正在被 6 种不同的形式改变。
-
Ctrl + F '16,什么都没有。 2016 年这个问题的答案有什么更新吗?
标签: asp.net-mvc validation architecture automapper xval