MVC Bootstrap Navbar - 活动类仅保留一个<li>元素

时间:2016-11-26 16:34:56

标签: javascript jquery asp.net-mvc twitter-bootstrap

我的asp.net mvc应用程序中有一个bootstrap导航栏,我想要做的就是从导航栏菜单中将活动类更改为当前选定的元素。

我设法通过使用以下jquery来部分实现这一点:

$(document).ready(function () {
            $('ul.nav.navbar-nav').find('a[href="' + location.pathname + '"]')
                .closest('li').addClass('active');
            $(this).siblings().removeClass('active');
        });

实施后,我的两个导航栏链接都是荧光笔。首先,只有一个具有默认active类的那个,然后我点击一个其他链接它也变得突出显示,但默认active仍然保持活动状态,所以我最终得到两个活动链接

有人可以帮助我正常工作

Bootstrap:

<div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("blah blah", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("blah", "Create", "Todoes")</li>
                        <li class="active">@Html.ActionLink("ALL", "Index", "Todoes")</li>
                        <li>@Html.ActionLink("blah2", "", "Todoes")</li>
                        <li>@Html.ActionLink("blah3", "", "Todoes")</li>




                    </ul>
                </div>
            </div>

2 个答案:

答案 0 :(得分:2)

为什么不在.cshtml文件中从剃刀中控制它?

我是这样做的:

public string CheckActive(string actionName, string controllerName)
{
   return ((ViewContext.RouteData.Values["action"].ToString().ToLower() == actionName.ToLower() && ViewContext.RouteData.Values["controller"].ToString().ToLower() == controllerName.ToLower()) ? "active" : string.empty);
}

如果给定的actionNamecontrollerName与当前的操作和控制器匹配,则此方法仅返回活动状态。

这样你会像这样使用它:

<li class="@CheckActive("actionInActionLink", "controllerInActionLink")">@Html.ActionLink("Link text", "actionInActionLink", "controllerInActionLink")</li>

答案 1 :(得分:2)

请试试这个:

$(document).ready(function () {
        $('li').each(function(){
               $(this).removeClass('active');
        });
        $('ul.nav.navbar-nav').find('a[href="' + location.pathname + '"]').closest('li').addClass('active');
});