标签的<meta>标签助手



我正在尝试使用TagHelper来重写我网站中的一些meta标签。

对于具有以下属性的每个meta标签:data-data-main,data-src,我想替换其中一个属性的值。

例如,这是原始的:

<meta name="js" content="script" data-async="true" data-data-main="requirejs/product-overview/init" data-src="/js/libs/require.js">

我想把它变成这样:

<meta name="js" content="script" data-async="true" data-data-main="http://cdn.website.nl/8c87f33ca5acc7fdb9186d6a497642784685aabade058d3530bdf6d30168cfcd.js" data-src="/js/libs/require.js">

唯一更改的是 data-data-main 属性:它现在指向 CDN 上的 URL,而不是本地文件。

我做了一个定制TagHelper来帮助我实现这个目标:

[HtmlTargetElement("meta", Attributes = "[data-data-main],[data-src]")]
public class MetaScriptTagHelper : TagHelper
{
    private readonly BluenotionSiteSettings _bnSiteSettings;
    private readonly SiteTemplateService _templateService;
    public MetaScriptTagHelper(BluenotionSiteSettingsFiller bnSiteSettingsFiller, SiteTemplateService templateService)
    {
        _bnSiteSettings = bnSiteSettingsFiller.Create(HttpContext);
        _templateService = templateService;
    }
    [ViewContext]
    public ViewContext ViewContext { get; set; }
    private HttpContext HttpContext => ViewContext.HttpContext;
    public override void Process(
        TagHelperContext context, TagHelperOutput output)
    {
        var dataDataMainValue = context.AllAttributes["data-data-main"].Value.ToString();
        var localPath = @".wwwrootjs" + dataDataMainValue.Replace('/', '\') + ".js";
        var siteTemplateId = _templateService.SiteTemplateBySiteIdAsync(_bnSiteSettings.SiteId);
        var cdnPath = _templateService.GetResourceByName(siteTemplateId, localPath);
        output.Attributes.Add("data-data-main", cdnPath);
    }
}

可悲的是,它返回了一个异常:

找到格式错误的"元"标记帮助程序。标记帮助程序必须具有开始和结束标记,或者是自关闭标记。

(没有进一步的堆栈跟踪/信息来指示格式错误的元标记是什么(

我无法调试格式错误的meta标签是什么,所以我不知道问题出在哪里。有什么建议吗?

好吧,在我发布问题之前没有检查这个,我觉得真的很愚蠢,但显然,是输入搞砸了TagHelper

它说Tag helpers must have a start and end tag or be self closing. 显然,这意味着进来的meta元素必须有一个结束标签或自闭合,而我的meta元素没有(如我之前/之后的示例中所示(。

所以要修复,我只需要使输入meta标签自关闭(即在关闭>之前添加一个/(:

<meta name="js" content="script" data-async="true" data-data-main="requirejs/product-overview/init" data-src="/js/libs/require.js"/>`

最新更新