Как получить ненавязчивую разметку проверки в моем помощнике по пользовательским тегам - PullRequest
0 голосов
/ 23 марта 2020

Есть ли простой способ, в ASP. Net Базовом пользовательском помощнике по тегам, получить разметку HTML, которая была бы выдана <span asp-validation-for="xxx"> помощником по тегам?

В Другими словами, могу ли я получить что-то эквивалентное HtmlHelper.ValidationMessageFor() в моем помощнике по тегам? Или мне нужно воссоздать это самому, копаясь в свойствах ModelExpression.ModelMetadata?

Справочная информация:

У меня есть помощники по тегам, которые добавляют Bootstrap разметку вокруг общих элементов HTML, таких как <input>, <button>, et c. В дополнение к добавлению Bootstrap разметки, эти помощники тегов также добавляют ненавязчивую разметку проверки после элементов «input»:

<span class='field-validation-valid' data-valmsg-for='{name}' data-valmsg-replace='true'></span>

Это прекрасно работает для проверки на стороне клиента, потому что JavaScript видит данные- * атрибуты и делает свое дело. Но это не работает для проверки на стороне сервера. Если средство проверки на стороне сервера возвращает сообщение об ошибке, сообщение не отображается в форме.

Небольшой эксперимент показывает что помощник по тегу <span asp-validation-for="xxx"> (который я НЕ использую) работает с валидаторами на стороне сервера для изменения HTML, отправляемого клиенту, если связанная переменная модели имеет ошибку проверки. Модифицированный HTML содержит сообщение об ошибке, предоставленное валидатором:

<span class='field-validation-error' data-valmsg-for='{name}' data-valmsg-replace='true'>Some error message.</span>

Итак, мои помощники тегов должны сделать то же самое и выдать либо нормальную, либо разметку сообщения с проверкой ошибки.

Было бы очень просто, если бы мой помощник по тегам мог испускать элемент <span asp-validation-for="xxx">, но, насколько я могу судить, нет способа заставить HTML, созданный моим помощником по тегам, интерпретировать как помощники по тегам.

Я могу покопаться в метаданных модели, найти сообщение об ошибке и отформатировать тег <span> сообщения проверки соответствующим образом, но вся эта работа уже сделана для меня (и, вероятно, более правильно, чем я мог бы сделать) к HtmlHelper.ValidationMessageFor() и с помощью validation-for помощника тега span.

FWIW, в этой статье показаны некоторые маги c, которые позволяют помощнику тега получить доступ к HtmlHelper. Я бы предпочел избежать этого пути и использовать что-то, что пахнет больше как собственный код "tag helper", если я могу.

...