MVC 导航设计

MVC Navigation Design

根据用户所在的页面呈现某些导航超链接的最佳方法是什么(我使用的是 C# MVC 4)。

我有一个 _layout.cshtml 如下所示(为显示目的而缩短)。

<body>
    @{Html.RenderAction("MainNav", "Navigation");}
    <div id="container">
        @RenderBody();
    </div>
</body>

如果用户导航到 /Home/Index 那么我希望 MainNav 呈现主页 | 的超链接管理层

然后,如果用户单击管理,将更改为主页 |公司 |团队 |如果他们单击这些链接之一,角色将再次更改。

你想得越多,你描述的问题就越复杂。所以我倾向于使用图书馆。尽管在这一点上看起来有点矫枉过正,但根据我的经验,它会在以后得到回报:

<body>
    @Html.MvcSiteMap().Menu()
    <div id="container">
        @RenderBody();
    </div>
</body>

这就是您在使用 https://github.com/maartenba/MvcSiteMapProvider

时需要做的全部
Install-Package MvcSiteMapProvider

只需像这样注释您的操作:

[MvcSiteMapNode(Title = "Menu Title")]

使用 Html.RenderAction()Html.Action() 将涉及传递一个参数来标识您的当前视图,并使用多个 if/else 块来定义部分应呈现的内容。相反,您可以使用 Razor 部分作为特定内容的占位符,这些内容可以放置在布局中的任何位置。

在布局中,添加 @RenderSection(),在本例中命名为 "menu" 作为菜单链接的占位符

<div id="sidebar">
  @RenderSection("menu", required: false)
</div>
<div id="container">
  @RenderBody();
</div>

然后在每个视图中,添加 @section menu { ... } 包含要显示的链接

Index.cshtml

// content to be displayed

@section menu {
  @Html.ActionLink("Home", .....)
  @Html.ActionLink("Management", .....)
}

Management.cshtml

// content to be displayed

@section menu {
  @Html.ActionLink("Home", .....)
  @Html.ActionLink("Company", .....)
  @Html.ActionLink("Teams", .....)
  @Html.ActionLink("Roles", .....)
}