ASP.NET MVC:如果url与当前url匹配,则将选定的CSS类添加到ActionLink

时间:2011-04-14 14:13:17

标签: asp.net asp.net-mvc

如果操作链接的url与正在显示的页面匹配,那么将选定的css类添加到ActionLink的最简单方法是什么?

谢谢!

5 个答案:

答案 0 :(得分:2)

这可能会成功

var currentUrl = location.pathname; //spits out something like 'Home/About'

$('a').each(function() {
    if ($(this).attr('href') == currentUrl) {
        $(this).addClass('yourClassName');
    }
});

答案 1 :(得分:0)

我们将当前网址与每个导航选项的正则表达式进行匹配,并在匹配时将其设置为选中状态。

答案 2 :(得分:0)

将LinkCssNaame等属性添加到您的视图模型中,让控制器将其设置在服务器上

答案 3 :(得分:0)

这是一个很难回答的问题,乍一看我脑海中唯一有效的答案是“它取决于”。你的意思是简单的代码,简单易懂或简单易懂......

可以使用jquery和window.location.pathname去掉并根据控制器和/或操作应用类(通常是.substr(1和/或2))。

可以使用带有SelectedItem指针的MenuModel完成,基于它添加类。 可以使用MenuItem []选择属性,基于它添加类。

它可能以各种其他方式完成(ViewBag让人想起)。 每个包括两个步骤: 1.保存/计算所选菜单项 2.根据此设置课程。

至于什么更简单,我认为这取决于您的偏好和网站的要求。如果你要支持非JavaScript用户,那么javascript方法可能不是最好的^^

Rant out

答案 4 :(得分:0)

您可以使用此扩展方法。

    public static MvcHtmlString ActionLinkWithSelection(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName)
    {
        const string action = "action";
        const string controller = "controller";
        const string selected = "selected";
        var routeValues = htmlHelper.ViewContext.RouteData.Values;
        var linkMatchesRoute = routeValues.ContainsKey(action) && routeValues.ContainsKey(controller) &&
                               actionName.Equals(routeValues[action]) && controllerName.Equals(routeValues[controller]);
        return htmlHelper.ActionLink(linkText, actionName, controllerName, null, linkMatchesRoute ? new { @class = selected } : null);
    }