升级到.Net 4.5后,MVC 4 Beta项目无法编译.
这是由于和之间的冲突
System.ComponentModel.DataAnnotations.CompareAttribute 而发生的System.Web.Mvc.CompareAttribute
System.ComponentModel.DataAnnotations.CompareAttributeMSDN文档说:
提供比较两个属性的属性.
虽然System.Web.Mvc.CompareAttributeMSDN文档说:
提供比较模型的两个属性的属性.
两者之间有什么区别,什么时候使用它们会"更聪明"?
10X.
Vin*_*lly 38
因此,查看MSDN文档并对两个类进行文字比较,我注意到这两个类都派生自System.ComponentModel.DataAnnotations.ValidationAttribute.事实上,这些类几乎完全相同.唯一值得注意的区别是MVC版本还实现了IClientValidatable,它添加了以下属性:
至于您应该使用哪个类,如果模型将直接绑定到视图,请使用MVC版本,以便您可以利用客户端验证.但是,如果您使用的是ViewModel,则可以使用ComponentModel类,并避免额外属性的不必要开销.你的来电!
Wee*_*eej 16
Microsoft Connect解决方法是:
由GavK于2012年6月17日上午5:13发布
我添加了对[System.Web.Mvc.Compare(...)]的完整引用,而不仅仅是使用[Compare(...)]
在VS 2012中为我工作......
joe*_*dev 14
Vinney钉住了大部分内容,除了你应该使用哪一个......
在将目标框架更改为4.5之后发生冲突的原因是因为在.NET 4.5之前,System.ComponentModel.DataAnnotations命名空间中没有CompareAttribute类,并且在System.Web.Mvc下定义的类填补了空白.因此,作为一个示例,如果您在更新目标框架之前在模型类中使用[Compare]和[Required]属性,则在升级时最终会出现冲突.
假设您没有System.Web.Mvc在模型类的命名空间中使用任何其他内容,则应删除该using语句并让它依赖于System.ComponentModel.DataAnnotations命名空间.不引人注意的客户端验证将继续完全像以前一样工作,就像它使用相同的命名空间(例如Required)装饰模型属性的其他属性一样.