Прежде всего, я должен сказать, что я понимаю, как проверка модели на основе данных на основе аннотаций работает в ASP.NET MVC4, и я успешно ее реализовал с помощью DataAnnotationsModelValidatorProvider
. Поэтому мне не нужна помощь по настройке.Ошибка проверки правильности модели MVC модели ASP.NET
Но когда дело доходит до HtmlHelpers
, я изо всех сил пытаюсь понять контекст сообщения об ошибке. И говоря context
, я имею в виду, о какой ошибке мы говорим. Какой атрибут вернул ошибку?
Что я могу получить, это Key
для ошибки и текущего ErrorMessage
, но программно, нет ничего, что, по крайней мере, я знаю, что свяжет эту ошибку, о которой мы говорим. Был ли атрибут Required
или какой-то другой атрибут, я не могу найти, как их отличить.
Давайте немного откроем сценарий. У меня есть пользовательский HtmlHelpers
для рендера ContentEditable
элементов. Например, Html.ContentEditableValidationMessageFor(m => m.firstName);
. Это будет что-то вроде этого:
<span contenteditable="true" data-valmsg-for="firstName" data-valmsg-replace="Please provide first name" class="field-validation-error">Please provide first name</span>
Теперь у меня есть плагин JQuery для обработки и сохранения изменений в contenteditable
элементе, и он будет сохраняться их в бэкэнд. Однако в пользовательском интерфейсе нет ничего, что могло бы сказать, какое сообщение об ошибке мы говорим. Люди могут легко увидеть, что это RequiredAttribute
, но программно нет данных, чтобы отличить его от некоторого MinLengthAttribute
.
В этом случае, если бы я просто использовал data-valmsg-for="firstName"
в качестве ключа для локализации, это возвращало бы то же сообщение об ошибке для всех ошибок, относящихся к одному и тому же свойству.
Чтобы округлить
Что бы лучшая практика, когда ModelState
доступен, испускать уникальный идентификатор для ModelError? Учитывая, что я использую ASP.NET MVC4 и DataAnnotationsModelValidatorProvider
.
Я могу придумать множество способов «взломать его вместе», но я бы хотел использовать ModelState
и все, что предоставляет MVC. Если все сходит до написания пользовательского ModelValidatorProvider
, то я все открыт для него. Пока это лучший и самый устойчивый способ обойти это. Я все для делать больше Теперь и меньше Позже чем Взлом это сейчас и Взлом его навсегда, чтобы держать его работы
Это очень интересный вопрос для меня. Какова была основа вашего взлома с использованием отражения? Как и вы, фраза «хорошо, что вы можете это сделать посредством рефлексии» часто означает настройку кода, который неизбежно будет плохо поддерживаться. Будете следить за этим ... –
Вы хотите данные на стороне клиента или сервера? – Jared
Любое обновление о вашем прогрессе? –