我需要隱藏母版頁上的自定義麪包屑中的當前節點。 我正在使用已經定製的SiteMapPath控件。 我正在從web.sitemap文件中自定義站點地圖,並且所有配置都正確地在web.config中配置。如何隱藏asp:SiteMapPath中的當前節點?
怎麼辦?
我需要隱藏母版頁上的自定義麪包屑中的當前節點。 我正在使用已經定製的SiteMapPath控件。 我正在從web.sitemap文件中自定義站點地圖,並且所有配置都正確地在web.config中配置。如何隱藏asp:SiteMapPath中的當前節點?
怎麼辦?
感謝你的自我回答,它幫助我開始,然後我調整了它,並認爲這個代碼是一個更清潔。雖然我沒有深入分析,但我認爲它會運行得更快,因爲當最終節點(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;
}
}
當我發現當我隱藏最後一個孩子時,分隔符將保持可見狀態,此時會出現其他問題。
我已經找到了一些解決方案:
我會用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;
}
}
}
對不起,但這不是asp-classic。 – Paul
每個@Paul固定標籤 – Greg