找不到类型或命名空间Compare(您是否缺少using指令或程序集引用?)

时间:2013-08-17 12:16:29

标签: c# asp.net-mvc

我正在尝试向我的网站添加管理员。 在我的AccountsModels.cs上找到了问题

它只需要比较实现的数据,但我似乎得到了这个错误。

  

我也有一个观点:
  -Register.cshtml
  -LogOn.cshtml
  -ChangePasswordSuccess.cshtml
  -ChangePassword.cshtml

     

&安培;一个AccountController.cs当然..

有人知道解决方案吗?

以下是代码:

using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Web.Security;

namespace Videoteek.Domain.Models
{
    public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LogOnModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        //****
        [Required]
        [Display(Name = "Security Question")]
        public string PwdQuestion { get; set; }
        [Required]
        [Display(Name = "Security Answer")]
        public string PwdAnswer { get; set; }

    }
}

8 个答案:

答案 0 :(得分:5)

从您的代码中看起来您想要将密码与确认密码进行比较。如果是,那么你的属性

Compare

不正确。它应该是

[CompareAttribute("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]

您已在代码中添加了所需的命名空间。您可以阅读更多相关信息here

答案 1 :(得分:2)

我遇到此错误的情况是我尝试从4.0升级到.Net framework 4.5。这不起作用,我恢复到4.0并得到了这个错误。

我通过输入

修复了这个构建错误

[System.Web.Mvc.Compare]

答案 2 :(得分:1)

.NET中有2个属性 可能位于程序集System.Web.Mvc.CompareAttribute中的命名空间System.Web.Mvc.dll中的那个将完成工作。

还有另一个(重复)做同样的事情。程序集System.ComponentModel.DataAnnotations.CompareAttribute中的完整路径为System.ComponentModel.DataAnnotations.dll,正如我所见,这是您正在引用的路径。那么您可能需要引用DLL System.ComponentModel.DataAnnotations.dll

您可以检查是否未引用这两者,因为这也可能导致问题。但这似乎不是问题,我只是提到。

答案 3 :(得分:1)

我也有同样的错误。我意识到当我使用.net 4.0时,System.Web.Mvc;System.ComponentModel.DataAnnotations;使用它已解决。但当我更改框架o 4.5时,错误是

'CompareAttribute' is an ambiguous reference between 'System.ComponentModel.DataAnnotations.CompareAttribute' and 'System.Web.Mvc.CompareAttribute'

The type or namespace name 'Compare' could not be found (are you missing a using directive or an assembly reference?)

结论 如果框架是4.0

System.Web.Mvc;

System.ComponentModel.DataAnnotations;

并重建项目 否则,如果框架是4.0

System.ComponentModel.DataAnnotations;

并重建项目

不要忘记始终以管理员(模式)

运行Visual Studio

答案 4 :(得分:1)

如果您正在使用Web API类,请使用System.Web.Mvc取出""并使用System.Web.Http;"更改为"然后离开"比较"关键字,因为它。但是,如果您使用纯MVC,请更改"比较"关键字to" CompareAttribute"。

System.ComponentModel.DataAnnotations;两种情况都需要验证。但是"比较"或" CompareAttribute"不是纯粹的验证。它是系统基于其体系结构模式(MVC或RestFul Web API)提供的工具。它使用属性类来简化引用和使用"比较工具"

答案 5 :(得分:1)

要在.NET4和.NET45之间进行此操作,您需要将这些文件中的两个using语句更改为:

using System.ComponentModel.DataAnnotations;
using CompareAttribute = System.Web.Mvc.CompareAttribute;

答案 6 :(得分:0)

添加对System.Web.Mvc.dll程序集的引用!

答案 7 :(得分:0)

简单,前缀为命名空间:

System.ComponentModel.DataAnnotations.Compare

由于[必需],[显示]等所有其他属性都使用此命名空间,因此它是有道理的。

编译器感到困惑,因为System.Web.Mvc命名空间也有一个名为“Compare”的方法,因此Framework 4.5希望您明确并消除歧义。如果将光标悬停在其他属性上,您将看到它们使用System.ComponentModel.DataAnnotations命名空间,但不需要限定,因为它们不与其他命名空间冲突,而两个命名空间中都存在[Compare]。有趣的是框架4如何解决,但需要告诉Framework 4.5 ......