在哪里可以轻松存储用于自定义标签帮助程序的HTML内容?

时间:2019-07-08 18:30:21

标签: html asp.net-core .net-core

我有以下自定义标签帮助程序

public class PageHeaderTagHelper : TagHelper
{
    public string HeaderContent { get; set; }

    private string Template { get; set; } = $@"<h2 class='pageheader-title'>{{0}}</h2>";

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "div";
        output.Attributes.SetAttribute("class", "page-header");

        output.Content.AppendHtml(string.Format(Template, HeaderContent));

    }
}

有时候,Template可能会变得很大,并且将其内容存储在字符串变量中并不是最方便的方法(可读性,需要将双引号转换为单引号等)

我考虑过使用资源文件并在其中粘贴HTML代码,这会更好。

但是有没有一种方法可以简单地将HTML标记粘贴到单独的物理文件中,使其易于从标记帮助程序中读取,编辑和使用?

2 个答案:

答案 0 :(得分:1)

您可以将HTML代码保存在wwwroot文件夹中的HTML页面中,例如wwwroot/mypage.html

<h2 class="pageheader-title">Hello World</h2>

在TageHelper中,您可以使用:

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
    var Template = await File.ReadAllTextAsync("wwwroot/mypage.html");
    output.Content.SetHtmlContent(Template);
}

请参阅https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/th-components?view=aspnetcore-2.2#inject-into-html-body-element

答案 1 :(得分:0)

我建议您将HTML存储在不可见的标记中。创建一个div并将其隐藏。使用这种方法,JavaScript可以轻松查询HTML模板。您还可以将HTML模板分离到另一个文件中,而无需使用doctype或body标签,并将其嵌入到主文档中。