首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.ComponentModel.DataAnnotations.compare vs System.Web.Mvc.Compare

System.ComponentModel.DataAnnotations.compare vs System.Web.Mvc.Compare
EN

Stack Overflow用户
提问于 2012-05-20 05:21:37
回答 6查看 21.3K关注 0票数 52

升级到.Net 4.5后,MVC4Beta项目编译失败。

发生这种情况的原因是System.ComponentModel.DataAnnotations.CompareAttributeSystem.Web.Mvc.CompareAttribute之间存在冲突

System.ComponentModel.DataAnnotations.CompareAttribute MSDN documentation说:

提供了一个比较两个属性的属性。

System.Web.Mvc.CompareAttribute MSDN documentation说:

提供了一个属性,用于比较模型的两个属性。

这两者之间的区别是什么,什么时候使用它们会更“聪明”?

10倍。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-15 05:55:19

因此,查看MSDN文档并对这两个类进行文字比较时,我注意到这两个类都是从System.ComponentModel.DataAnnotations.ValidationAttribute.派生的事实上,这些类几乎是完全相同的。唯一值得注意的区别是,MVC版本还实现了IClientValidatable,它添加了以下属性:

  • FormatPropertyForClientValidation -(静态成员)通过在属性前面加上星号和点来格式化属性以进行客户端验证。
  • GetClientValidationRules -使用指定的模型元数据和控制器上下文获取属性的比较值客户端验证规则列表。

至于应该使用哪个类,如果模型将直接绑定到视图,请使用MVC版本,以便您可以利用客户端验证。但是,如果您使用的是ViewModels,则可以坚持使用ComponentModel类,从而避免额外属性带来的不必要的开销。你说了算!

  • System.Web.Mvc.CompareAttribute
  • System.ComponentModel.DataAnnotations.CompareAttribute
票数 38
EN

Stack Overflow用户

发布于 2012-06-27 22:02:51

Microsoft Connect解决方法是:

GavK于2012年6月17日凌晨5:13发布的

我添加了对System.Web.Mvc.Compare的完整引用(...)而不是仅仅使用比较(...)

在VS 2012中对我有效...

票数 16
EN

Stack Overflow用户

发布于 2013-08-29 05:29:06

Vinney解决了大部分问题,除了你应该使用哪一个...

将目标框架更改为4.5后出现冲突的原因是因为在.NET 4.5之前,there was no CompareAttribute class in the System.ComponentModel.DataAnnotations namespace和在System.Web.Mvc下定义的类填补了这一空白。因此,举个例子,如果您在更新目标框架之前在模型类中使用了[Compare][Required]属性,那么在升级时就会出现冲突。

假设您没有在模型类的System.Web.Mvc名称空间中使用任何其他内容,则应该删除该using语句,并让它依赖于System.ComponentModel.DataAnnotations名称空间。不显眼的客户端验证将继续像以前一样工作,就像它对来自相同名称空间(例如Required)的用来装饰模型属性的其他属性所做的那样。

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

https://stackoverflow.com/questions/10668948

复制
相关文章

相似问题

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