Подтвердить что ты не робот

"Подтвердить пароль" и "Пароль" не совпадают. MVC5

Я не могу локализовать проверку: "Подтвердить пароль" и "Пароль" не совпадают. в MVC5

[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.")] //Why not display this message???????
        public string ConfirmPassword { get; set; }

Пожалуйста, помогите мне локализовать его.

4b9b3361

Ответ 1

У вас есть 2 варианта решения этой проблемы:

- Вариант 1

Изменить:

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

к

[System.Web.Mvc.Compare("Password", ErrorMessage = "Your custom error message")]

- Вариант 2 (рекомендую этот)

Нам нужно обновить наш ASP.NET MVC 5. В вашей Visual Studio перейдите в консоль диспетчера пакетов и введите:

PM> update-package

Вы можете получить сообщение об ошибке:

public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }

Эта ошибка вызвана обновлением во внутренней структуре MVC 5. Чтобы решить эту ошибку, выполните следующие действия: fooobar.com/questions/410887/...

Ответ 2

Похоже, что это известная проблема и в настоящий момент не работает корректно - http://aspnetwebstack.codeplex.com/workitem/1401.

Однако временным обходным решением будет использование атрибута Compare из System.Web.Mvc, который помечен как устаревший. Вот пример:

using CompareObsolete = System.Web.Mvc.CompareAttribute;

...

[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")]
[CompareObsolete("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }

В настоящее время я использую этот обходной путь до тех пор, пока не будет доступно официальное исправление. Все работает отлично - я использую этот атрибут для локализации сообщений об ошибках с использованием ресурсов.

Просто не забудьте обновить его, как только выйдет официальное исправление.

EDIT: проблема исправлена ​​в последней версии.

Ответ 3

Кажется, есть два типа CompareAttribute. Если посмотреть на MSDN, то с пространством имен System.Web.Mvc представляется устаревшим, и они предлагают использовать тот, у которого есть пространство имен System.ComponentModel.DataAnnotations. Ссылка: https://msdn.microsoft.com/en-us/library/system.web.mvc.compareattribute(v=vs.118).aspx

С Visual Studios вы должны быть явным с аннотацией и добавить пространство имен для атрибута в аннотации, как показано ниже:

[System.ComponentModel.DataAnnotations.CompareAttribute("Password", ErrorMessage = "The password and confirmation password do not match.")]

Для получения дополнительной информации см. также: System.ComponentModel.DataAnnotations.compare vs System.Web.Mvc.Compare