Пользовательский атрибут 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 с отдельными учетными записями пользователей в качестве аутентификации.
Ответы
Ответ 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.")]
Он работает!
Ответ 3
Это старая ошибка с 2013 года. Попробуйте выполнить следующую команду, чтобы обновить все зависимостей проекта:
PM> update-package
Ответ 4
Вместо этого используйте System.ComponentModel.DataAnnotations.Compare.
Поскольку System.Web.Mvc.Compare устарел, указанный выше атрибут сравнения выполняет ту же работу.