К сожалению, независимо от того, куда вы смотрите, большинство ответов на этот вопрос - «Реализация IDataErrorInfo!».
Эта же проблема появляется, если вы попытаетесь, например, ввести текстовую строку в поле текстового поля, привязанное к целочисленному свойству. Проще говоря, если MVC не может преобразовать пользовательское значение в правильный тип, он генерирует эти (совершенно бесполезные) общие ошибки и никогда не вызывает членов IDataErrorInfo.
Определенно трудно переопределить эти бесполезные сообщения, и лично я считаю, что лучший ответ - просто реализовать некоторую проверку на стороне клиента для обработки этих сценариев. Случаи, когда он генерирует эти сообщения, очень последовательны и легко предсказуемы:
- Пользователь не указал значение для необнуляемого поля
- Пользователь ввел или выбрал значение, которое не может быть преобразовано в базовый тип (например: текст в числовое поле)
Кроме того, проверка на стороне клиента в любом случае является хорошей практикой. Если у пользователя не включен javascript, то он наверняка сможет выяснить проблему в любом случае, если вы используете Html.ValidationMessage () и / или стилизуете поля ввода для выявления проблем.