当用户在根节点页面上时,如何在SiteMapPath控件中隐藏根节点?例如,我在子页面上的痕迹痕迹是:
主页>产品>锤子> Ball Peen
哪个好。但是当用户在主页上时,SiteMapPath控件将显示
主页
这是无用的混乱。我想在用户在主页上时禁止显示Home(根节点)。我在母版页中有SiteMapPath控件。另外,我正在处理SiteMapResolve以在节点中设置查询字符串。
答案 0 :(得分:13)
一种可能的解决方案是在主页上隐藏SiteMapPath
控件:
mySiteMapPath.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
答案 1 :(得分:3)
我见过一些基于代码的示例,但这里有一个cheep CSS解决方案(你的目标浏览器必须支持css 2.1),它会隐藏根节点和后面的路径分隔符。
通过将RootNodeTemplate设置为空来杀死Root节点,如下所示:
<asp:SiteMapPath ID="SiteMapPath1" runat="server" CssClass="breadCrumbTrail">
<RootNodeTemplate></RootNodeTemplate>
</asp:SiteMapPath>
这将使它不为Root节点呈现任何内容,但仍然会显示Root的路径分隔符,因此将这些CSS选择器添加到样式表中(重要:请注意,我将我的SiteMapPath1元素命名为'breadCrumbTrail'的CssClass):
.breadCrumbTrail
{
font-size: small;
}
/*
First child element rendered by a SiteMapPath is an <a> tag you have no control over,
adjacent to that is your root node's span tag, adjacent to that is the root node's
path-separator span: don't display it.
*/
.breadCrumbTrail > a:first-child + span + span
{
display: none;
}
答案 2 :(得分:2)
我设法解决了这个问题但是花了一段时间,因为我遇到的问题有点微妙。 schou-rode有正确的想法,这就是我在Page_Load
做的事情没有成功。它无法工作的原因是因为我正在克隆SiteMapResolve
中的节点并返回克隆。这发生在Page_Load
之前,因此SiteMap.CurrentNode
引用了克隆并且与SiteMap.RootNode
的比较失败。
以下是完整的解决方案:
protected void Page_Load(object sender, EventArgs e)
{
SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}
private SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
if (SiteMap.CurrentNode == null || SiteMap.CurrentNode == SiteMap.RootNode)
{
return SiteMap.CurrentNode;
}
// clone and set querystring in other nodes...
}
答案 3 :(得分:1)
通过3个简单步骤隐藏SiteMapPath根音的正确方法之一:
从ContentPage引用MasterPage
示例:
<%@ MasterType VirtualPath="~/Master.master" %>
在设计器类
中将SiteMapPath设为受保护的内部示例:强>
protected internal global::System.Web.UI.WebControls.SiteMapPath SiteMapPath1;
从ContentPage中隐藏它
示例:强>
Master.SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
答案 4 :(得分:1)
在主页上,将下面的脚本添加到“head”部分:
protected void Page_Load(object sender, EventArgs e)
{
SiteMapPath sp = (SiteMapPath)Master.FindControl("SiteMapPath1");
sp.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}
要应用上述方法,SiteMapPath1
应放在MasterPage上。
答案 5 :(得分:1)
SiteMapDataSource上还有一个ShowStartingNode属性。将其设置为false以隐藏根节点。
答案 6 :(得分:1)
我已经插入了_Layout.cshtml,发现最简单的解决方案是在控制渲染块周围包装一个If语句(以前建议的逻辑),然后调用它:
@if (SiteMap.CurrentNode != SiteMap.RootNode)
{
@Html.MvcSiteMap().SiteMapPath()
}
答案 7 :(得分:0)
<asp:SiteMapPath ID="contentNavigation" runat="server">
<RootNodeTemplate>
</RootNodeTemplate>
</asp:SiteMapPath>
和css代码:
#ctl00_contentNavigation span:nth-child(2),span:nth-child(3)
{
display:none;
}
答案 8 :(得分:0)
最近我有类似的问题,但我在我的解决方案中使用XmlDataSource作为菜单。
源XML的示例结构:
<root>
<Menu text="" url=""/>
<Menu text="" url=""/>
</root>
如果你不想显示'root'菜单项,你必须在XmlDataSource上简单设置XPath属性值'/ root / *'
答案 9 :(得分:0)
ParentLevelsDisplayed = 0 会有所帮助
<asp:SiteMapPath ID="SiteMapPath1" runat="server" PathSeparator=""
ParentLevelsDisplayed="0" >
<RootNodeTemplate></RootNodeTemplate>
</asp:SiteMapPath>