"Подтвердить пароль" и "Пароль" не совпадают. 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; }
Пожалуйста, помогите мне локализовать его.
Ответы
Ответ 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