Есть ли простой способ, в 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", если я могу.