Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 System.ComponentModel.DataAnnotations.compare与System.Web.Mvc.compare_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 System.ComponentModel.DataAnnotations.compare与System.Web.Mvc.compare

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

MVC4beta项目升级到.NET4.5后无法编译

这种情况的发生是由于
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-使用指定的模型元数据和控制器上下文获取属性的比较值客户端验证规则列表
至于应该使用哪个类,如果模型将直接绑定到视图,则使用MVC版本,以便可以利用客户端验证。但是,如果您使用的是ViewModels,则可以坚持使用ComponentModel类,并避免额外属性带来的不必要的开销。你的电话

此外,他们还建议了另一种解决方案,即将Compare()首选名称空间的引用移动到模型名称空间中。例如,如果您喜欢使用来自
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参考,就像我在课堂上所做的那样,这个解决方案是有效的。