0

Независимо от того, как я пытаюсь скрыть его, я не могу получить результат из моего TagHelper для атрибута Google Analytics onclick, чтобы он не был экранирован. В частности, одинарные кавычки.TagHelper child tag unescaped значение атрибута

TagBuilder listTag = new TagBuilder("ul"); 
listTag.AddCssClass(ListClass); 

foreach (Category category in Links) 
{ 
    bool isSelectedCategory = category.PathValue == ViewContext.RouteData.Values["controller"].ToString() 
     || (category.PathValue == "home" 
      && ViewContext.RouteData.Values["controller"].ToString().ToLowerInvariant() == "home" 
      && ViewContext.RouteData.Values["action"].ToString().ToLowerInvariant() == "index"); 
    TagBuilder listItemTag = new TagBuilder("li"); 
    listItemTag.AddCssClass(ListItemClass); 
    if (isSelectedCategory) { listItemTag.AddCssClass(ListItemActiveClass); } 

    TagBuilder linkTag = new TagBuilder("a"); 
    linkTag.InnerHtml.Append(category.Name); 
    linkTag.AddCssClass(LinkClass); 
    if (isSelectedCategory) { linkTag.AddCssClass(LinkActiveClass); } 
    linkTag.Attributes["href"] = urlHelper.RouteUrl("default", new 
    { 
     controller = category.PathValue, 
     action = "index", 
     topicPathString = category.DefaultTopic?.PathValue, 
     articlePathString = category.DefaultTopic?.DefaultArticle?.PathValue 
    }); 
    if (EnableGoogleAnalytics) 
    { 
     string gaOnClick = $"ga('send', 'event', 'Navbar', 'Links', '{category.Name}');"; 
     linkTag.MergeAttribute("onclick", gaOnClick); 

    } 
    listItemTag.InnerHtml.AppendHtml(linkTag); 
    listTag.InnerHtml.AppendHtml(listItemTag); 
} 

output.Content.SetHtmlContent(listTag); 
base.Process(context, output); 

Выходы onclick="ga'send', 'event', 'Navbar', 'Links', 'Guides');".

Что мне нужно, это gaOnClick="ga('send', 'event', 'Navbar', 'Links', 'Guides');".

Возможно ли это с вложенными элементами тега, или мне нужно подходить к нему по-другому?

ответ

0

Проведя большую часть утра, пытаясь найти решение, это только уместно, что я наткнулся на него сразу после публикации!

Основано на Creating html helpers without encoding, но с добавленным классом полезности на основе Convert IHtmlContent/TagBuilder to string in C#, решило проблему.

HtmlString decodedLinkTag = new HtmlString(
    System.Net.WebUtility.HtmlDecode(
     Utility.TagBuilderToString(linkTag))); 

listItemTag.InnerHtml.AppendHtml(decodedLinkTag);