我在.NET Core应用程序中工作。我为仪表板侧边栏中的导航链接创建了自定义标记助手。当页面处于活动状态时,导航链接会将active
类应用于其<li>
。
以下是自定义标记帮助程序的代码:
public class SidebarLink : TagHelper
{
private const string ActiveClass = "active";
[HtmlAttributeName("asp-controller")]
public string Controller { get; set; }
[HtmlAttributeName("asp-action")]
public string Action { get; set; }
public string Icon { get; set; }
public string Name { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var controller = ViewContext.RouteData.Values["controller"].ToString();
var action = ViewContext.RouteData.Values["action"].ToString();
var html =
$@"<li><a href='{Controller}/{Action}'><i class='material-icons'>{Icon}</i><span class='title'>{Name}</span></a></li>";
output.TagName = "li";
output.Content.SetHtmlContent(html);
if (string.Equals(controller, Controller) && string.Equals(action, Action))
{
output.Attributes.SetAttribute("class", ActiveClass);
}
await base.ProcessAsync(context, output);
}
}
当我调试时,我可以看到我的if语句评估为true,因此调用了.SetAttribute()
,但出于某种原因,我的<li>
没有active
CSS类。
我做错了什么?
答案 0 :(得分:0)
尝试在没有<li>
标记的情况下替换您的html字符串,因此它将如下所示:
var html =
$@"<li><a href='{Controller}/{Action}'><i class='material-icons'>{Icon}</i><span class='title'>{Name}</span></a></li>"
您正在将输出标记设置为<li>
,因此您无需再设置html内容即可。