"Сравнение" - это двусмысленная ссылка между "System.ComponentModel.DataAnnotations.CompareAttribute" и "System.Web.Mvc.CompareAttribute"

У меня есть эта ошибка в моем AccountController.

Не удалось найти имя типа или пространства имен 'SelectListItem' (вам не хватает директивы using или ссылки на сборку?

Очевидное исправление заключается в добавлении using System.Web.Mvc; Однако, когда я делаю, я получаю 4 новых ошибки

На двух разностных линиях:

Невозможно найти имя типа или пространства имен ErrorMessage (вам не хватает директивы using или ссылки на сборку?)

В двух других строках:

"Сравнение" - это двусмысленная ссылка между "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

Да. Оба этих пространства имен имеют тот атрибут, который имеет одинаковую функциональность.

В соответствии с документацией msdn, System.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
}