【问题标题】:How to hide current node in asp:SiteMapPath?如何在 asp:SiteMapPath 中隐藏当前节点?
【发布时间】:2014-08-20 14:01:13
【问题描述】:

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

怎么做?

【问题讨论】:

  • 抱歉,这不是 asp-classic。
  • 每个@Paul 的固定标签

标签: asp.net .net-3.5 master-pages breadcrumbs sitemappath


【解决方案1】:

感谢您的自我回答,它帮助我入门,然后我对其进行了调整,并认为这段代码更简洁一些。虽然我没有深入分析它,但我认为它会运行得更快,因为它只会在最终节点 (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;
   }
}

【讨论】:

    【解决方案2】:

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

    我找到了一些解决方案:

    我将使用 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;
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多