了解.NET Core中TagHelper内用户的路由

时间:2018-04-02 12:04:49

标签: razor asp.net-core

我正在开发.NET Core应用程序。我有一个带有一些链接的侧边栏。当我点击特定链接时,我想将<li class="active "> <a href="home/index"> <i class="material-icons">home</i> <span class="title">Home</span> </a> </li> CSS类应用于其列表项。

<sidebarlink controller="home" action="index" icon="home"></sidebarlink>

我使用.NET Framework 4.6中的Html Helpers来实现这一点,但我不知道如何在.NET Core中执行此操作。我希望标签助手的最终结果如下所示:

public class SidebarLink : TagHelper
{
  private const string ActiveClass = "active";

  public string Controller { get; set; }

  public string Action { get; set; }

  public string Icon { get; set; }

  public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
  {
    output.TagName = "li";
    var content = await output.GetChildContentAsync();
    content.SetHtmlContent($@"<a href=\"/Controller/Action\"><i class=\"material-icons\">Icon</i><span class=\"title\">Suppliers</span></a>"); // this doesn't work, something is up with the syntax
    // only if I am on the route for the passed controller and action
    // not sure how to check
    output.Attributes.SetAttribute("class", ActiveClass);
  }
}

根据我在.NET Framework 4.6中所做的,我已经尝试了但是我无法让它为新的Tag Helpers工作。

active

我不知道如何检查并查看我是否在匹配传递的Controller和Action的路线上,以便我可以应用pacman -S msys/libcrypt-devel 类。

1 个答案:

答案 0 :(得分:2)

将以下属性添加到标记助手:

[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }

然后,您可以通过以下方式获取当前的控制器/操作:

var controller = ViewContext.RouteData.Values["controller"]
var action = ViewContext.RouteData.Values["action"]