Неэкранированное значение атрибута дочернего тега TagHelper

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

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');".

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


person Ashley Bye    schedule 14.01.2017    source источник


Ответы (1)


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

На основе создания помощников html без кодирования, но с добавленным служебным классом на основе Преобразование IHtmlContent/TagBuilder в строку на C# решило проблему.

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

listItemTag.InnerHtml.AppendHtml(decodedLinkTag);
person Ashley Bye    schedule 14.01.2017