自定义标记助手 - 替换html标记

时间:2017-04-18 03:35:58

标签: c# asp.net-core

我创建了一个Tag Helper,它读取包含元标记的txt文件并将内容写入页面。 但是在执行Process之后,原始标记不会更改。 我想用txt文件的内容完全替换原始标记。

标记助手

[HtmlTargetElement("LC_meta")]
public class MetaTagHelper : TagHelper
{
    private IHostingEnvironment _env;

    [HtmlAttributeName("filename")]
    public string Filename { get; set; } = "default.txt";

    public MetaTagHelper(IHostingEnvironment env)
    {
        _env = env;
    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
       output.Content.SetContent(System.IO.File.ReadAllText(System.IO.Path.Combine(_env.WebRootPath, "META", this.Filename)));
    }
}

,这是原始代码:

<LC_meta />
<LC_meta filename="sample.txt" />

我有点卡住了,非常感谢提前!

1 个答案:

答案 0 :(得分:9)

如果要省略标记,则只需将标记名设置为NULL并写入文本:

0

或者如果要更改标记名称,请将标记名设置为其他内容:

public override void Process(TagHelperContext context, TagHelperOutput output)
{
    output.TagName = null;
    output.TagMode = TagMode.StartTagAndEndTag;
    output.PostContent.SetContent("<h1>this gets HTML encoded<h1>");
    output.PostContent.SetHtmlContent("<h1>Hello World</h1>");
}

另外,请确保您的cshtml文件包含

public override void Process(TagHelperContext context, TagHelperOutput output)
{
    output.TagName = "pre";
    output.TagMode = TagMode.StartTagAndEndTag;
    output.PostContent.SetContent("<h1>this gets HTML encoded<h1>");
    output.PostContent.SetHtmlContent("<h1>Hello World</h1>");
}

在开头(布局之前),例如

@addTagHelper *, ASSEMBLY_NAME_OF_CLASS_WITH_TAGHELPER