Я хочу создать помощник по тегам, чтобы поместить HTML до и после тегов <input>
, но я хочу сохранить поведение по умолчанию asp-for
и получить доступ к данным ModelExpression
.
С этой целью я попытался переопределить тип Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
, как описано в этом посте . Однако, несмотря на то, что я могу проверить в отладчике, что вызывается метод Process
, PreContent
и PostContent
оба установлены, в HTML ничего не отображается, кроме стандартного тега <input>
. Хотя он отлично работает при создании вспомогательного тега с нуля для другого тега.
Я создал небольшой проект, чтобы продемонстрировать эту проблему. Я помещаю весь проект на GitHub , и я копирую специальный помощник по тегам, который пытаюсь создать ниже.
[HtmlTargetElement("input", Attributes = "asp-for,test-label")]
public class TestTagHelper : InputTagHelper
{
public TestTagHelper(IHtmlGenerator generator) : base(generator)
{
}
[HtmlAttributeName("test-label")]
public string Label { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.PreContent.SetHtmlContent($"<b>{WebUtility.HtmlEncode(Label)}</b> ");
output.PostContent.SetHtmlContent($" <i>({WebUtility.HtmlEncode(For.Name)})</i>"); // access information from the input tag
base.Process(context, output);
}
}
Я что-то упускаю из виду? Есть ли здесь предостережение? Или это то, что просто невозможно сделать?