将活动类添加到asp.net core 的菜单中?

5 html css asp.net-mvc jquery asp.net-core

这是我的菜单

<nav class="moduletable navigation hidden-sm hidden-xs">
  <ul id="nav" class="sf-menu">
    <li class="@Html.IsActive("GameVideos", "Index")"><a href="@Url.Action("Index", "GameVideos")">videogame</a></li>                                
    <li class="@Html.IsActive("SystemRequirements", "Index")"><a href="@Url.Action("Index", "SystemRequirements")">systemReq</a></li>
    <li class="@Html.IsActive("Games", "UpcommingGames")"><a href="@Url.Action("UpcommingGames", "Games")">upcomming game</a></li>
  </ul>
</nav>
Run Code Online (Sandbox Code Playgroud)

并且此方法检查菜单活动

 public static string IsActive(this IHtmlHelper htmlHelper, string controller, string action)
    {
        var routeData = htmlHelper.ViewContext.RouteData;

        var routeAction = routeData.Values["action"].ToString();
        var routeController = routeData.Values["controller"].ToString();

        var returnActive = (controller == routeController && action == routeAction);

        return returnActive ? "active" : "";
    }
Run Code Online (Sandbox Code Playgroud)

当我选择菜单时它正在工作但是当我单击一个游戏并查看详细信息活动类被删除时,此代码仅适用于索引视图,但不适用于详细信息菜单

小智 15

您必须像这样更改 isactive 方法:

public static string IsActive(this IHtmlHelper htmlHelper, string controller, string action)
    {
        var routeData = htmlHelper.ViewContext.RouteData;

        var routeAction = routeData.Values["action"].ToString();
        var routeController = routeData.Values["controller"].ToString();

        var returnActive = (controller == routeController && (action == routeAction || routeAction == "Details"));

        return returnActive ? "active" : "";
    }
Run Code Online (Sandbox Code Playgroud)