【问题标题】:How to hide root level when using MvcSiteMapProvider?使用 MvcSiteMapProvider 时如何隐藏根级别?
【发布时间】:2015-02-25 17:55:23
【问题描述】:
我正在使用 MvcSiteMapProvider 创建一个简单的面包屑。我有一个我无法解决的小问题。假设我的网站包含五个选项卡:主页、客户、公司、报告和关于(这些是顶级选项卡)
当用户浏览主页时,我不希望显示面包屑。但是,当用户在客户页面上时,面包屑导航应该显示“主页”(这同样适用于其他顶级选项卡 - 当然除了主页)。对于下一个级别,假设用户在客户页面上单击了一个名为“客户详细信息”的链接,面包屑应该显示“主页/客户”。所以基本上,顶层被省略了。
我该如何存档?非常感谢任何帮助! :)
【问题讨论】:
标签:
model-view-controller
hide
root
breadcrumbs
mvcsitemapprovider
【解决方案1】:
最简单的方法就是编辑/Views/Shared/DisplayTemplates/目录下的SiteMapPathHelperModel.cshtml模板文件。
@model MvcSiteMapProvider.Web.Html.Models.SiteMapPathHelperModel
@using System.Web.Mvc.Html
@using System.Linq
@using MvcSiteMapProvider.Web.Html.Models
@foreach (var node in Model) {
// Condition to ensure root node is invisible
// when it is the current node
if (!(node.IsRootNode && node.IsCurrentNode))
{
@Html.DisplayFor(m => node);
if (node != Model.Last()) {
<text> > </text>
}
}
}
您也可以通过自定义visibility provider 来做到这一点。
【解决方案2】:
感谢您的回复! :)
我意识到这样的事情也可以:
@foreach (var node in Model.Reverse().Skip(1).Reverse()) {
@Html.DisplayFor(m => node);
if (node != Model.Last()) {
<text> / </text>
}
}