Есть ли простой способ в помощнике настраиваемого тега ASP.Net Core получить разметку HTML, которая была бы сгенерирована помощником тега <span asp-validation-for="xxx">
?
Другими словами, могу ли я получить что-то эквивалентное HtmlHelper.ValidationMessageFor()
в моем помощнике по тегам? Или мне нужно воссоздать это самому, покопавшись в свойствах ModelExpression.ModelMetadata
?
Фон:
Я создал помощники тегов, которые добавляют разметку Bootstrap вокруг общих элементов HTML, таких как <input>
, <button>
и т. Д. Помимо добавления разметки Bootstrap, эти помощники тегов также добавляют ненавязчивую разметку проверки после элементов «input»:
<span class='field-validation-valid' data-valmsg-for='{name}' data-valmsg-replace='true'></span>
Это отлично подходит для проверки на стороне клиента, потому что JavaScript видит атрибуты data- * и делает свое дело. Но это не работает для проверки на стороне сервера. Если валидатор на стороне сервера возвращает сообщение об ошибке, это сообщение не отображается в форме.
Небольшое экспериментирование показывает, что помощник тега <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, эта статья демонстрирует волшебство, которое позволяет помощнику тега получить доступ к HtmlHelper
. Я бы предпочел избежать этого пути и использовать что-то, что больше похоже на собственный код "помощника по тегам", если смогу.