2013-11-15 4 views
13

Я не могу локализовать проверку: «Подтвердить пароль» и «Пароль» не совпадают. в 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; } 

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

+0

Локализация означает адаптировать ваш код к определенному языку. Вы имеете в виду интернационализацию? –

ответ

6

Похоже, что это известная проблема и работает некорректно в данный момент - 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: проблема была исправлена ​​в последнем выпуске.

13

У вас есть 2 варианта, чтобы решить эту ошибку:

--option 1

Изменение:

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

к

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

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

Нам нужно обновить наш ASP.NET MVC 5. В вашем Visual Studio перейдите в Package Manager Console и введите:

PM> update-package 

Вы migh получить ошибку в:

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

эта ошибка вызвана обновлением внутренней структуры MVC 5. для того, чтобы решить, что ошибка это сделать: https://stackoverflow.com/a/23090099/2958543

2

Там, кажется, два типа 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

Смежные вопросы