在Asp.NET MVC中突出显示的导航菜单?

时间:2010-01-11 16:45:19

标签: asp.net-mvc menu

这是一个简单的问题。 stackoverflow如何在Asp.net MVC中执行他们的菜单,突出显示我们所在的页面

7 个答案:

答案 0 :(得分:3)

可能没有MVC特殊魔法可以实现这一点。

我确定:

if( HttpContext.Current.Request.Path == "some some menu url" )

if( ViewContext_Or_ControllerContext.RouteData.Values["controller"] == "some value") 

在某处使用。

您可以将此代码放在大约三个不同的位置(View(.aspx),ViewModel,Custom HtmlHelper),它们都需要相同的代码。

答案 1 :(得分:3)

出于这个目的,我写了一些代码,有些部分使用我的自定义扩展,如语言,继续使用它,只是忽略次要部分。

这个我置于我的Partial之上,其中包含获取动作和控制器的菜单,以便我可以将其传递给扩展名。

<%  string currentAction = ViewContext.RouteData.Values["action"].ToString();
    string currentController = ViewContext.RouteData.Values["controller"].ToString(); %>

这是侧边栏项目,基本上这将生成一个带有链接的“li”标签和您的自定义类,以指示该链接当前是否在页面/突出显示中使用。

public static string SidebarItem(this System.Web.Mvc.HtmlHelper html, string currentAction, string currentController, string action, string controller, string languageKey, params object[] args)
{
    TagBuilder tb = new TagBuilder("li");
    if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
    {
        tb.GenerateId("activemenu");
    }
    string text = html.Language(languageKey, args);
    string link = html.ActionLink(text, action, controller).ToHtmlString();
    tb.SetInnerText("{0}");
    return String.Format(tb.ToString(), "<span>"+link+"</span>");
}

以下是上面代码的实际用法

<%= Html.SidebarItem(currentAction, currentController, "index", "home", "index") %>

答案 2 :(得分:1)

答案 3 :(得分:0)

请参阅此网址

http://stackoverflow.com/questions这表明问题控制器可能会处理此页面。因此,它会更改查看以显示突出显示的菜单项。

答案 4 :(得分:0)

如果查看页面源代码,他们会在<li>元素中添加一个css类来更改背景颜色。我猜测代码会查看用户正在访问的控制器(问题,用户等),并将该类添加到该部分的<li>标记中。

答案 5 :(得分:0)

您可以使用HTML帮助程序来创建菜单。这样所有代码都在一个地方。

SiteMap HtmlHelper ASP.NET MVC  有关于可用组件的一些信息。

答案 6 :(得分:0)

最好的方法 - 创建MVC助手(参见前面的答案) 但是如果你不想这样做并且想要快速做 - 请记住MVC 4.0中的新功能,并设置html标签的属性(如果将属性设置为null,将避免使用属性):

        @{
            string currentAction = ViewContext.RouteData.Values["action"].ToString().ToLower();

            string classUpcomingTime = null;
            string classArchive = null;
            string classReporting = null;

            switch (currentAction)
            {
                case "upcomingtime":
                    classUpcomingTime = "active";
                    break;
                case "archive":
                    classArchive = "active";
                    break;
                case "reporting":
                    classReporting = "active";
                    break;
            }

            <ul class="nav navbar-nav">
                <li class="@classUpcomingTime">
                    <a href="/Vacancy/UpcomingTime">Open Vacancies</a>
                </li>
                <li class="@classArchive">
                    <a href="/Vacancy/Archive">Archive</a>

                <li class="@classReporting">
                    @*<a href="#">Reporting</a>*@
                    <a href="/Vacancy/Reporting">Reporting</a>
                </li>
            </ul>
        }