Asp.net mvc 4 System.ComponentModel.DataAnnotations.compare与System.Web.Mvc.compare
MVC4beta项目升级到.NET4.5后无法编译 这种情况的发生是由于Asp.net mvc 4 System.ComponentModel.DataAnnotations.compare与System.Web.Mvc.compare,asp.net-mvc-4,Asp.net Mvc 4,MVC4beta项目升级到.NET4.5后无法编译 这种情况的发生是由于 System.ComponentModel.DataAnnotations.CompareAttribute和System.Web.Mvc.CompareAttribute 说: 提供一个比较两个属性的属性 While说: 提供一个属性,用于比较模型的两个属性 两者之间的区别是什么?何时使用它们更“聪明” 10倍。Microsoft Connect解决方案是: GavK于2012年6月17日上午5:13发布 我添加了对[S
System.ComponentModel.DataAnnotations.CompareAttribute
和System.Web.Mvc.CompareAttribute
说:
提供一个比较两个属性的属性
While说:
提供一个属性,用于比较模型的两个属性
两者之间的区别是什么?何时使用它们更“聪明”
10倍。Microsoft Connect解决方案是: GavK于2012年6月17日上午5:13发布 我添加了对[System.Web.Mvc.Compare(…)]的完整引用,而不是 仅使用[比较(…)]
在VS 2012中适用于我…因此,查看MSDN文档并对这两个类进行文字比较,我注意到这两个类都是从System.ComponentModel.DataAnnotations.ValidationAttribute派生的。事实上,这些类几乎完全相同。唯一值得注意的区别是MVC版本还实现了IClientValidable,它添加了以下属性:
- FormatPropertyForClientValidation-(静态成员)通过在星号和点之前加上前缀来格式化用于客户端验证的属性李>
- GetClientValidationRules-使用指定的模型元数据和控制器上下文获取属性的比较值客户端验证规则列表
System.Web.Mvc
的比较,请使用:
using System.ComponentModel.DataAnnotations;
namespace MyProject.MyViewModel
{
using System.Web.Mvc;
编译器将首先在模型的名称空间内进行搜索。如果希望明确说明引用,只需添加以下行:
使用CompareAttribute=System.Web.Mvc.CompareAttribute 除了你应该使用哪一个之外,Vinney把大部分都搞定了 将目标框架更改为4.5后发生冲突的原因是.NET 4.5之前的版本和System.Web.Mvc下定义的类填补了这一空白。因此,例如,如果在更新目标框架之前在模型类中使用
[Compare]
和[Required]
属性,则升级时会出现冲突
假设您没有在模型类的System.Web.Mvc
名称空间中使用任何其他内容,您应该使用语句删除该,并让它依赖于System.ComponentModel.DataAnnotations
名称空间。不引人注目的客户端验证将继续像以前一样工作,就像它对来自同一名称空间的其他属性所做的一样(例如必需)。使用Visual Studio 2013(MVC 5 project,.NET 4.5)IntelliSense建议System.Web.Mvc.CompareAttribute
已被弃用
我使用了System.ComponentModel.DataAnnotations.CompareAttribute
,效果很好。
它还执行客户端验证 -我仍然不明白两者的主要区别是什么。YoYo正如我在回答中所指出的,来自System.Web.DataAnnotations的版本正在扩展ComponentModel版本,以启用某些Web客户端功能。当使用System.Web.Mvc.CompareAttribute修饰的属性绑定到Razor视图时,该视图将能够生成一些JavaScript验证挂钩。但是,如果要使用System.ComponentModel.DataAnnotations.ValidationAttribute装饰属性,则视图将无法执行客户端验证。您将仅限于服务器端验证。未回答问题。他想知道应该使用哪一个。我删除using语句让他不高兴,所以我添加了对成员类型的完整引用,例如[System.Web.Mvc.Compare()]。当我高兴地使用该功能删除未使用的using语句时,我从成员类型中删除了System.Web.Mvc前缀。我的回答有帮助吗?如果是这样的话,如果你能把它标记为答案那就太好了。谢谢:)好问题。我也在想哪一个更聪明。@Josh请看我的答案,了解更多关于这个问题的细节。我不知道这一点,@jm2。感谢您的更正(以及“at-a-boy:”),如果您仍然需要System.Web.Mvc参考,就像我在课堂上所做的那样,这个解决方案是有效的。