我正在尝试向我的网站添加管理员。 在我的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; }
}
}
答案 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 ......