【问题标题】:TagHelper PreContent and PostContent not showing up in HTML when overriding InputTagHelper覆盖 InputTagHelper 时,TagHelper PreContent 和 PostContent 未显示在 HTML 中
【发布时间】:2019-05-26 04:32:27
【问题描述】:

我想创建一个标签助手来在<input>标签之前和之后放置一些HTML,但我想保留默认的asp-for行为并访问ModelExpression数据。

为此,我尝试覆盖Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper 类型,如in this post 所述。然而,即使我可以在调试器中验证 Process 方法被称为 PreContentPostContent 都被设置,除了标准的 <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


    【解决方案1】:

    对于这个问题,我们可以尝试调用PreElementPostElement 而不是PreContentPostContent 之类的

    [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)
        {
            base.Process(context, output);
            output.PreElement.SetHtmlContent($"<b>{WebUtility.HtmlEncode(Label)}</b>");
            output.PostElement.SetHtmlContent($"<i>({WebUtility.HtmlEncode(For.Name)})</i>");
        }
    }
    

    【讨论】:

    • @MiffTheFox 你是什么意思没有工作?错误或任何意外结果?你目前的结果是什么?
    • 它与我发布的代码没有任何变化。与原始问题一样,输出 HTML 中没有放置帖子内容或前置内容。 HTML 不包含 标记。 gist.github.com/MiffOttah/f1b2de8c945cf8fb8dfb395ab023c2fa
    • @MiffTheFox 你确定你用的是PreElement而不是PreContent吗?
    • 是的,就是这样。我什至从未意识到这是一个不同的财产。我将编辑答案以指出这一点。
    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多