【发布时间】:2014-04-02 03:16:01
【问题描述】:
我正在为 MVC4 使用 MvcSiteMapProvider (v4.6.1) 来处理面包屑和菜单。我已经完成了关于安装、配置和使用@Html.MvcSiteMap().Menu()的100级教程。
我现在想要一个显示部分顶层的菜单。目前,我的顶级节点包括 Home、Profile、Login、Thing 1、Thing 2 和 Thing 3。在this SOf answer 的基础上,我制作了一个菜单,在水平行中显示所有这些项目。我还确定,一旦系统包含授权,无法访问 Thing 3 的用户将不会在他们的菜单上看到它。
不过,我想要的是只显示一些项目:Home 和 Login 必须显示在面包屑中,但不能出现在菜单中。请注意,它们在当前站点地图中不是连续的。
大家有什么建议?
我目前的观点,来自链接的答案:
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using MvcSiteMapProvider.Web.Html.Models
<div class="nav navbar-nav navbar-left">
<ul class="nav navbar-nav">
@foreach (var node in Model.Nodes) {
<li>@Html.DisplayFor(m => node)</li>
}
</ul>
</div>
我当前从我的菜单视图调用此视图:
@Html.MvcSiteMap().Menu("MenuHelper", 0, true, false, 1)
当然,我可以创建一个新的菜单助手来过滤掉我不想显示的菜单。
编辑:Mvc.sitemap:
<mvcSiteMapNode title="Home" controller="Home" action="Index" visibility="MainMenu,!*">
<mvcSiteMapNode title="About" controller="Home" action="About"/>
<mvcSiteMapNode title="Profile" controller="Home" action="UpdateProfile" visibility="MainMenu,!*"/>
<mvcSiteMapNode title="Login" controller="SGAccount" action="Login">
<mvcSiteMapNode title="Register" controller="SGAccount" action="Register">
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Thing1" controller="Thing1" action="Index" visibility="MainMenu,!*">
<mvcSiteMapNode title="Thing1-action1" controller="Thing1" action="action1" visibility="RoleMenu,!*"/>
<mvcSiteMapNode title="Thing1-action2" controller="Thing1" action="action2" visibility="RoleMenu,!*"/>
</mvcSiteMapNode>
<mvcSiteMapNode title="Thing2" controller="Thing2" action="Index" visibility="MainMenu,!*">
</mvcSiteMapNode>
</mvcSiteMapNode>
MainMenu 显示 Home、About、Profile、Login、Thing1 和 Thing2。它不应该显示所有这些。
Edit 2: Using Structure Map for external DI,我添加了这一行,但我不确定它是否正确:
x.For<ISiteMapNodeVisibilityProviderStrategy>().Use<SiteMapNodeVisibilityProviderStrategy>();
编辑 3:我的面包屑 @Html.MvcSiteMap().SiteMapPath() 停止工作。这也需要修复。
编辑 4:我通过从 web.config 中删除内部 DI 设置修复了前两次编辑的问题。现在我又开始展示我想要展示的内容了。
【问题讨论】:
标签: asp.net-mvc-4 razor mvcsitemapprovider