2014-06-30 13 views
0

我需要隐藏母版页上的自定义面包屑中的当前节点。 我正在使用已经定制的SiteMapPath控件。 我正在从web.sitemap文件中自定义站点地图,并且所有配置都正确地在web.config中配置。如何隐藏asp:SiteMapPath中的当前节点?

怎么办?

+0

对不起,但这不是asp-classic。 – Paul

+0

每个@Paul固定标签 – Greg

回答

0

感谢你的自我回答,它帮助我开始,然后我调整了它,并认为这个代码是一个更清洁。虽然我没有深入分析,但我认为它会运行得更快,因为当最终节点(SiteMapNodeItemType.Current)被绑定时,它只会运行一次,而每次触发事件时,您的代码都会遍历该循环。

protected void Breadcrumb_ItemDataBound(object sender, SiteMapNodeItemEventArgs e) 
{ 
    // If this is the current node, hide it along with its 
    // separator (both have same ItemIndex) 
    if (e.Item.ItemType == SiteMapNodeItemType.Current) 
    { 
     foreach (SiteMapNodeItem node in (from SiteMapNodeItem x in ((SiteMapPath)sender).Controls 
             where x.ItemIndex == e.Item.ItemIndex 
             select x).ToList()) 
     node.Visible = false; 
    } 
} 
0

当我发现当我隐藏最后一个孩子时,分隔符将保持可见状态,此时会出现其他问题。

我已经找到了一些解决方案:

我会用OnItemDataBound

定义:<asp:SiteMapPath OnItemDataBound="SiteMapNodeItemEventHandler" /> 实施<asp:SiteMapPath ID="siteMapPath" runat="server" SiteMapProvider="CustomSiteMapProvider" OnItemDataBound="SiteMapPath_OnItemDataBound">

CS部分:

protected void SiteMapPath_OnItemDataBound(object sender, SiteMapNodeItemEventArgs e) 
    { 
     //Hiding current bread crumb node - it will be presented via ajax after page load. 
     SiteMapNodeItem nodeItem = e.Item; 
     SiteMapNode node = ((SiteMapPath)sender).Provider.CurrentNode; 

     // need to hide separator also, so I'm looking for current node index to compare to SiteMapNodeItem.ItemIndex 
     // same index will be for node and separator. 
     if ((node != null) && (node.ParentNode != null)) 
     { 
      int index = 0; 
      do 
      { 
       node = node.ParentNode; 
       index++; 
      } while (node.ParentNode != null); 

      if (nodeItem.ItemIndex == index) 
      { 
       nodeItem.Visible = false; 
      } 
     } 
    }