'比较'是System.ComponentModel.DataAnnotations.CompareAttribute'之间的模糊参考。和' System.Web.Mvc.CompareAttribute'

时间:2016-03-30 19:32:24

标签: c# asp.net-mvc entity-framework asp.net-identity

我的AccountController中出现此错误。

  

类型或命名空间名称' SelectListItem'找不到(你错过了使用指令或汇编引用吗?

显而易见的解决方法是添加using System.Web.Mvc;但是当我这样做时,我会收到4个新错误

在两个不同的界限上:

  

类型或命名空间名称' ErrorMessage'找不到(你错过了使用指令或汇编引用吗?)

另外两行:

  

'比较'是System.ComponentModel.DataAnnotations.CompareAttribute'之间的模糊参考。和' System.Web.Mvc.CompareAttribute'

为什么会发生这种情况,我该如何解决?

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


}

ResetPasswordViewModel

public class ResetPasswordViewModel
{

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

}

1 个答案:

答案 0 :(得分:23)

是的。这两个名称空间都具有相同功能的属性。

根据msdn documentationSystem.Web.Mvc.CompareAttribute已过时,建议使用System.ComponentModel.DataAnnotations.CompareAttribute

因此要么使用包含命名空间的完全限定名称。

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

如果您不想在所有地方放置完全限定名称,也可以使用别名

using Compare = System.ComponentModel.DataAnnotations.CompareAttribute;
public class ResetPasswordViewModel
{
   [DataType(DataType.Password)]   
   [Compare("Password", ErrorMessage = "The password and confirm password do not match.")]
   public string Password { set;get;}
   //Other properties as needed
}