我正在嘗試使用TagHelper
s來重寫我網站上的一些meta
標籤。TagHelper for <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
屬性:它指向的URL在CDN上而不是本地文件。
我做了一個自定義的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);
}
}
可悲的是,它返回一個例外:
發現了一個畸形的 '元' 標籤幫手。標籤助手必須有一個開始和結束標籤或自行關閉。
(沒有進一步的堆棧跟蹤/信息指示什麼惡意元標記爲)
我不能調試畸形meta
標籤是什麼,所以我不知道問題出在哪裏。有什麼建議麼?
嗯,是不是應該是一個正斜槓'/ '? – juunas
@juunas你是對的,編輯。謝謝! – nbokmans
如果您希望TagHelper允許它爲非自閉合,您還可以指定TagStructure爲TagStructure.WithoutEndTag。例如:https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.TagHelpers/InputTagHelper.cs#L18 –