我想在ASP.NET Core MVC中添加带有NAV-Link的活动类

发布于 2025-02-11 08:30:01 字数 269 浏览 1 评论 0原文

我需要与.nav-link添加一个活跃的类

<ul class="sidebar-nav" id="sidebar-nav">
 <li class="nav-item">
  <a asp-area="DemoArea" class="nav-link" asp-controller="Dashboard" asp-action="Index">Dashboard</a>
 </li>
</ul>

I need to add an active class with the .nav-link

<ul class="sidebar-nav" id="sidebar-nav">
 <li class="nav-item">
  <a asp-area="DemoArea" class="nav-link" asp-controller="Dashboard" asp-action="Index">Dashboard</a>
 </li>
</ul>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

故笙诉离歌 2025-02-18 08:30:01

您可以使用jQuery来做到这一点,而不是最好的答案,但也有效。您可以根据需要添加菜单级别...请参阅下面的代码:

<script>
        $(document).ready(function () {
           var currentUrl = document.location.pathname;

            var elementLevelZero = $('.nav-main a[href="' + currentUrl + '"]');
            $(elementLevelZero).addClass('active');

            var elementLevelZeroList = $(elementLevelZero).closest('ul');

            var elementLevelOne = $(elementLevelZeroList).prev("a");
            $(elementLevelOne).addClass('active');

            var elementLevelOneList = $($(elementLevelOne).parent()).closest('ul');

            var elementLevelTwo = $(elementLevelOneList).prev("a");
            $(elementLevelTwo).addClass('active'); 

            var elementLevelTwoList = $($(elementLevelTwo).parent()).closest('ul');

            var elementLevelThree = $(elementLevelTwoList).prev("a");
            $(elementLevelThree).addClass('active'); 
        });
    </script>

您可以使用.east函数在列表中的每个父项目上循环。

You can use jquery to do this, Not the best answer but it works too. And you can add menu levels as you want... see the code below:

<script>
        $(document).ready(function () {
           var currentUrl = document.location.pathname;

            var elementLevelZero = $('.nav-main a[href="' + currentUrl + '"]');
            $(elementLevelZero).addClass('active');

            var elementLevelZeroList = $(elementLevelZero).closest('ul');

            var elementLevelOne = $(elementLevelZeroList).prev("a");
            $(elementLevelOne).addClass('active');

            var elementLevelOneList = $($(elementLevelOne).parent()).closest('ul');

            var elementLevelTwo = $(elementLevelOneList).prev("a");
            $(elementLevelTwo).addClass('active'); 

            var elementLevelTwoList = $($(elementLevelTwo).parent()).closest('ul');

            var elementLevelThree = $(elementLevelTwoList).prev("a");
            $(elementLevelThree).addClass('active'); 
        });
    </script>

You can use .each function to loop on each parent item in your list.

画离情绘悲伤 2025-02-18 08:30:01

这是一个动态添加类的简单演示,按ViewBag值:

<ul class="sidebar-nav" id="sidebar-nav">
 <li class="nav-item">
  <a asp-area="DemoArea" class="@(ViewBag.Class==true?"nav-link":"")" asp-controller="Dashboard" asp-action="Index">Dashboard</a>
 </li>
</ul>

后端:

public async Task<IActionResult> Index()
{
    ViewBag.Class = true;
    return View();
}

Here is a simple demo for dynamic add class by ViewBag value:

<ul class="sidebar-nav" id="sidebar-nav">
 <li class="nav-item">
  <a asp-area="DemoArea" class="@(ViewBag.Class==true?"nav-link":"")" asp-controller="Dashboard" asp-action="Index">Dashboard</a>
 </li>
</ul>

Backend:

public async Task<IActionResult> Index()
{
    ViewBag.Class = true;
    return View();
}
蘑菇王子 2025-02-18 08:30:01

我已经使用了静态类菜单螺旋桨和静态方法makeActiveClass,以及当传递值和routedata值匹配时,我已经传递了控制器名称和操作方法名称,然后它将返回活动类,而其他为null。

public static class MenuStateHelper
{
    public static string MakeActiveClass(this IUrlHelper urlHelper, string controller, string action)
    {
        try
        {
            string result = "active";

            if (!String.IsNullOrEmpty(Convert.ToString(urlHelper.ActionContext.RouteData.DataTokens["area"])))
            {
                string areaName = urlHelper.ActionContext.RouteData.DataTokens["area"].ToString();
            }

            if (urlHelper.ActionContext.RouteData.Values != null)
            {
                string controllerName = urlHelper.ActionContext.RouteData.Values["controller"].ToString();
                string methodName = urlHelper.ActionContext.RouteData.Values["action"].ToString();
                if (string.IsNullOrEmpty(controllerName)) return null;
                if (controllerName.Equals(controller, StringComparison.OrdinalIgnoreCase))
                {
                    if (methodName != null && methodName.Equals(action, StringComparison.OrdinalIgnoreCase))
                    {
                        return result;
                    }
                }
            }

            return null;
        }
        catch (Exception)
        {
            return null;
        }

    }
}

我已经称 makeactiveclass 锚标签助手

<a asp-area="@menu.Area" asp-controller="@menu.ControllerName" asp-action="@menu.ActionMethod" class="nav-link @Url.MakeActiveClass(menu.ControllerName, menu.ActionMethod)">
    <i class="far fa-circle nav-icon"></i>
    <p>
        @menu.MenuName
    </p>
  </a>

I have used the static class MenuStateHelper and static method MakeActiveClass along with that I have passed controller name and action method name when both passed values and RouteData value match then it will return active class else it will be null.

public static class MenuStateHelper
{
    public static string MakeActiveClass(this IUrlHelper urlHelper, string controller, string action)
    {
        try
        {
            string result = "active";

            if (!String.IsNullOrEmpty(Convert.ToString(urlHelper.ActionContext.RouteData.DataTokens["area"])))
            {
                string areaName = urlHelper.ActionContext.RouteData.DataTokens["area"].ToString();
            }

            if (urlHelper.ActionContext.RouteData.Values != null)
            {
                string controllerName = urlHelper.ActionContext.RouteData.Values["controller"].ToString();
                string methodName = urlHelper.ActionContext.RouteData.Values["action"].ToString();
                if (string.IsNullOrEmpty(controllerName)) return null;
                if (controllerName.Equals(controller, StringComparison.OrdinalIgnoreCase))
                {
                    if (methodName != null && methodName.Equals(action, StringComparison.OrdinalIgnoreCase))
                    {
                        return result;
                    }
                }
            }

            return null;
        }
        catch (Exception)
        {
            return null;
        }

    }
}

And I have called MakeActiveClass method on Anchor Tag Helper

<a asp-area="@menu.Area" asp-controller="@menu.ControllerName" asp-action="@menu.ActionMethod" class="nav-link @Url.MakeActiveClass(menu.ControllerName, menu.ActionMethod)">
    <i class="far fa-circle nav-icon"></i>
    <p>
        @menu.MenuName
    </p>
  </a>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文