желаемое поведение
Недокументированное необнуляемое свойство типа значения в модели автоматически получает сообщение проверки «Требуется значение», добавленное DefaultModelBinder. Вместо этого я хотел бы отобразить «Требуется значение для {Property DisplayName}».
Я могу заставить это работать точно так же, как для свойств DataAnnotated , используя шаблон string.format
. Я также могу изменить литеральную строку по умолчанию для отображения из DefaultModelBinder в этом случае. Я добавил шаблонную строку в качестве ресурса: PropertyValueRequired -> "Information is required for {0}"
согласно:
Asp.Net MVC 2 - Изменение строки PropertyValueRequired
Изменение сообщений об ошибках ModelState по умолчанию в ASP.NET MVC 3
Примеры здесь в StackOverflow указывают, что это возможно, как для MVC DefaultModelBinder, так и для DataAnnotations Validator. В обеих вышеуказанных ссылках автор указывает, что он делает это для DefaultModelBinder (но не может заставить работать другие аспекты).
Наблюдаемое поведение
К сожалению, он выводит дословно {0}
из MVC DefaultModelBinder (где я вместо этого хочу вставить DisplayName).
Сообщения выше вводят в заблуждение? MVC3 поддерживает строку формата для PropertyValueInvalid, но не PropertyValueRequired? По соглашению я должен использовать только DataAnnotation, и если я вижу сообщение DefaultModelBinder, значит ли это, что я недостаточно обработан / оформлен?
Я думаю, что в следующем посте Дарин Димитров может сказать, что использовать шаблон невозможно. Цитата: "переопределить сообщение об ошибке по умолчанию требуется ... глобально, что было бы бесполезно."
ASP.NET MVC - Пользовательское сообщение проверки для типов значений
Почему я хочу это сделать (по запросу спрашивающего)
- Когда я связываюсь со встроенным сложным типом, таким как
Dictionary<string, int>
, нет способа украсить (int) значение сообщением проверки, поэтому я получаю общее сообщение проверки (DefaultModelBinder, а не DataAnnotation) каждый член словаря.
- Я ожидал (естественно, я думаю), что разбор сообщения локализованного требуемого ресурса должен работать одинаково независимо от того, какой слой его перехватывает.
- Я отключил
AddImplicitRequiredAttributeForValueTypes
как популярный метод решения проблем с флажками и привязкой даты / времени, которые у меня были, что, похоже, усугубляет это функциональное несоответствие.
- Просмотр имен в сообщении проверки раздела ошибочных недекорированных полей помогает сократить время отладки.