首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.Net MVC2验证是否需要在模式和使用方面进行更多考虑?

ASP.Net MVC2验证是否需要在模式和使用方面进行更多考虑?
EN

Stack Overflow用户
提问于 2010-02-02 12:43:39
回答 5查看 928关注 0票数 16

这是这片土地的基本情况。像大多数人一样,我有自己的域对象和视图模型。我喜欢使用视图模型的想法,因为它允许专门为给定的视图上下文创建模型,而不需要更改我的业务对象。

我遇到的问题是在我的域对象上定义的类型级别验证,并将这些规则发送到客户端。在这种情况下,假设我使用数据注释来描述验证规则,当我将数据从域对象移动到视图模型时,视图模型不再知道它应该让接口执行什么验证(因为验证是在域对象上定义的)。

使用MVC2,您可以让它根据当前对象的验证规则自动执行客户端/服务器端验证。但是因为验证规则是在域对象上定义的,而不是在视图模型上定义的,所以我必须在视图模型上复制验证规则才能使其正常工作。

其他人是如何处理这类问题的?我的想法是,除了将数据从域对象映射到视图模型之外,我们还需要跨验证规则进行映射,但我还没有看到其他人讨论这个问题……Brad Wilson最近详细讨论了这个问题,但并没有真正解决域对象和视图模型上的规则重复问题……你的想法是什么?

干杯安东尼

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-07 01:48:06

DataAnnotation属性用于验证输入并向最终用户提供UI反馈。这实际上是它们唯一的预期用途。我对UI对象和业务对象使用不同的验证策略,因此DA验证属性最终只显示在向用户显示的模型上。

票数 3
EN

Stack Overflow用户

发布于 2010-02-02 16:07:24

这可能并不合适,但是如果您只是将验证规则/注释从您的模型移动到您的ViewModels中呢?在我参与的几个项目中,我们选择了阻止视图访问通过其对应的ViewModel公开的信息以外的任何内容。由于所有数据交互都将通过ViewModel执行,因此不需要对模型对象进行验证。

这个论点的反面是,您可以很容易地复制某些验证规则,因为不同的ViewModels可能与相同的模型接口。在这种情况下,简单地将模型声明为在ViewModel上公开的属性可能是有意义的。对于回发,它们可以接受模型作为其参数,从而允许ModelBinder基础结构处理请求。在这种情况下,如果ModelState.IsValid为false,则只需在重新显示视图之前将属性重新分配给ViewModel即可。

我建议您将注释移动到您的ViewModels。这是有意义的,因为许多视图是a)几个模型组合的结果,或者b)模型数据的子集。

票数 2
EN

Stack Overflow用户

发布于 2010-02-20 19:09:19

事实证明,AutoMapper可能能够自动为我们做这件事,这是最好的情况。

AutoMapper-用户:将验证属性传输到视图模型?

http://groups.google.com/group/automapper-users/browse_thread/thread/efa1d551e498311c/db4e7f6c93a77302?lnk=gst&q=validation#db4e7f6c93a77302

我还没有抽出时间尝试那里提出的解决方案,但打算很快就会。

(Cross也在我的(dupe)问题上发布了这一点)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2181940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档