自定义标记助手.SetAttribute()不起作用

时间:2018-04-09 17:33:34

标签: c# asp.net-core

我在.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类。

我做错了什么?

1 个答案:

答案 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内容即可。