Значение неэкранированного атрибута дочернего тега 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');"
,
Возможно ли это с вложенными элементами тега, или мне нужно подходить к нему по-другому?
1 ответ
Потратив большую часть утра, пытаясь найти решение, вполне уместно, что я наткнулся на одно вскоре после публикации!
Основанный на Создании помощников HTML без кодирования, но с добавленным вспомогательным классом, основанным на Преобразовании IHtmlContent/TagBuilder в строку в C#, решил проблему.
HtmlString decodedLinkTag = new HtmlString(
System.Net.WebUtility.HtmlDecode(
Utility.TagBuilderToString(linkTag)));
listItemTag.InnerHtml.AppendHtml(decodedLinkTag);