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

Пользовательский атрибут ErrorMessage для сравнения не работает

Шаги для воспроизведения:

  • Создайте новый проект MVC 5 с отдельными учетными записями пользователей.
  • Посмотрите на ErrorMessage, указанный в RegisterViewModel для свойства ConfirmPassword. Это "пароль и пароль подтверждения не совпадают".
  • Создайте и запустите приложение и попробуйте зарегистрироваться с несогласованными паролями. Я поставлю сообщение об ошибке "Подтверждение пароля" и "Пароль" не совпадают ". Вместо того, что указано в модели.

Похоже, что пользовательское свойство ErrorMessage в атрибуте Compare не работает. Даже если я укажу ErrorMessage, валидация по-прежнему покажет какое-то сообщение по умолчанию.

Эта работа с System.Web.Mvc.CompareAttribute, но теперь она устарела, и вместо этого вы должны использовать System.ComponentModel.DataAnnotations.CompareAttribute, которая показывает эту проблему.

Я добавляю атрибут Compare к свойству и задаю ErrorMessage следующим образом:

[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match. I'll even add some random text!")]
public string ConfirmPassword { get; set; }

ожидаемый результат будет (, но это не то, что я получаю):

Expected result with custom ErrorMessage

Вместо этого я получаю сообщение об ошибке "default":

Actual result with standard ErrorMessage

Проверка на стороне клиента отключена. Я что-то упускаю? Этот пример берется из шаблона MVC 5 с отдельными учетными записями пользователей в качестве аутентификации.

4b9b3361

Ответ 1

Я думаю, что это ошибка. (Edit: It is.) Я также могу воспроизвести это. Фактически, поведение точно совпадает с проверкой на стороне клиента. Если вы посмотрите на сгенерированный HTML, вы увидите, что он даже не генерирует настраиваемую строку ошибки - он всегда испускает значение по умолчанию.

На самом деле, у меня только что был поиск, чтобы найти дополнительную информацию, и я обнаружил, что он был отправлен как ошибка в codeplex. Было сообщено 8 дней назад, и кому-то был назначен. Вы можете найти отчет об ошибке здесь.

Ответ 2

У меня такая же проблема, решение:

Изменить:

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

To:

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

Он работает!

Ответ 4

Вместо этого используйте System.ComponentModel.DataAnnotations.Compare. Поскольку System.Web.Mvc.Compare устарел, указанный выше атрибут сравнения выполняет ту же работу.