<meta> 个标签的 TagHelper
TagHelper for <meta> tags
我正在尝试使用 TagHelper
s 重写我网站中的一些 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 = @".\wwwroot\js\" + dataDataMainValue.Replace('/', '\') + ".js";
var siteTemplateId = _templateService.SiteTemplateBySiteIdAsync(_bnSiteSettings.SiteId);
var cdnPath = _templateService.GetResourceByName(siteTemplateId, localPath);
output.Attributes.Add("data-data-main", cdnPath);
}
}
遗憾的是,它 returns 一个例外:
Found a malformed 'meta' tag helper. Tag helpers must have a start and end tag or be self closing.
(不再 stacktrace/information 指出格式错误的元标记是什么)
我无法调试格式错误的 meta
标签是什么,所以我不知道问题出在哪里。有什么建议吗?
好吧,我觉得在发布问题之前没有检查这个真的很愚蠢,但显然,是 input 弄乱了 TagHelper
。
它说 Tag helpers must have a start and end tag or be self closing.
显然,这意味着进来的 meta
元素必须有一个结束标记或自动关闭,这(如我的 before/after 示例所示)我的 meta
个元素没有。
所以要修复,我只需要让输入 meta
标签自动关闭(即在关闭 >
之前添加一个 /
):
<meta name="js" content="script" data-async="true" data-data-main="requirejs/product-overview/init" data-src="/js/libs/require.js"/>`
我正在尝试使用 TagHelper
s 重写我网站中的一些 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 = @".\wwwroot\js\" + dataDataMainValue.Replace('/', '\') + ".js";
var siteTemplateId = _templateService.SiteTemplateBySiteIdAsync(_bnSiteSettings.SiteId);
var cdnPath = _templateService.GetResourceByName(siteTemplateId, localPath);
output.Attributes.Add("data-data-main", cdnPath);
}
}
遗憾的是,它 returns 一个例外:
Found a malformed 'meta' tag helper. Tag helpers must have a start and end tag or be self closing.
(不再 stacktrace/information 指出格式错误的元标记是什么)
我无法调试格式错误的 meta
标签是什么,所以我不知道问题出在哪里。有什么建议吗?
好吧,我觉得在发布问题之前没有检查这个真的很愚蠢,但显然,是 input 弄乱了 TagHelper
。
它说 Tag helpers must have a start and end tag or be self closing.
显然,这意味着进来的 meta
元素必须有一个结束标记或自动关闭,这(如我的 before/after 示例所示)我的 meta
个元素没有。
所以要修复,我只需要让输入 meta
标签自动关闭(即在关闭 >
之前添加一个 /
):
<meta name="js" content="script" data-async="true" data-data-main="requirejs/product-overview/init" data-src="/js/libs/require.js"/>`