【发布时间】:2019-05-26 04:32:27
【问题描述】:
我想创建一个标签助手来在<input>标签之前和之后放置一些HTML,但我想保留默认的asp-for行为并访问ModelExpression数据。
为此,我尝试覆盖Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper 类型,如in this post 所述。然而,即使我可以在调试器中验证 Process 方法被称为 PreContent 和 PostContent 都被设置,除了标准的 <input> 标记之外,没有任何东西出现在 HTML 中。不过,从头开始为另一个标签创建标签助手时,它可以正常工作。
我创建了一个小项目来演示这个问题。我输入了the entire project on 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);
}
}
我是否遗漏了一些明显的东西?这样做有什么注意事项吗?或者这是无法做到的事情?
【问题讨论】:
标签: asp.net-core razor-pages tag-helpers