2017-05-29 10 views
0

TagHelperを使用して、私のウェブサイトのmetaタグの一部を書き直そうとしています。TagHelper <meta>タグ

次の属性を持つmetaタグのそれぞれについて:data-data-main,data-src、これらの属性の1つの値を置き換えたいと思います。

例えば、これはオリジナルです:

<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タグはので、私は問題がある見当がつかないが何であるかをデバッグすることはできません

(なし、さらにスタックトレース/情報が不正なメタタグが何であったかを示すために)。助言がありますか?

答えて

1

さて、私は私が質問を投稿、しかしapparantly、それはTagHelperアップをいじりました入力だった前にこれをチェックしていないため、本当に愚かな感じ。

それはApparantly 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"/>` 
+0

うーん、それは 'スラッシュすることになっていません/ '? – juunas

+0

@ youunasあなたが正しい、編集されています。ありがとう! – nbokmans

+0

TagHelperで非自己閉包型にするには、TagStructureがTagStructure.WithoutEndTagであることを指定することもできます。例:https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.TagHelpers/InputTagHelper.cs#L18 –