Používáte v ASP.NET WebForms aplikacích Bootstrap a strukturu stránek máte definované souborem Web.sitemap. Pak možná potřebujete zobrazit navigaci pro aktuální stránku podle SiteMap definice. V ASP.NET WebForms k tomu sloužíval control SiteMapPath a v Bootstrap na to existuje komponenta jménem Breadcrumb. Control SiteMapPath ovšem generuje hodně špatné html, které se pro Bootstrap vůbec nehodí.
Vytvořil jsem proto vlastní jednoduchý kontrol BootstrapSiteMapPath, který ze Sitemap generuje správné html přesně právě pro Bootstrap Breadcrumb komponentu. Kód celého kontrolu je:
[DefaultProperty("Text")]
[ToolboxData("<{0}:BootstrapSiteMapPath runat=server></{0}:BootstrapSiteMapPath>")]
public class BootstrapSiteMapPath : SiteMapPath
{
public BootstrapSiteMapPath()
{
this.PathSeparator = null;
this.RenderCurrentNodeAsLink = false;
ShowToolTips = false;
}
protected override void Render(HtmlTextWriter writer)
{
var node = this.Provider.CurrentNode;
var nodes = new Stack<SiteMapNode>();
for (var currentNode = node; currentNode != null; currentNode = currentNode.ParentNode)
{
nodes.Push(currentNode);
}
var sb = new System.Text.StringBuilder();
sb.AppendLine(@"<ul class=""breadcrumb"" " + this.CssClass + ">");
foreach (var currentNode in nodes)
{
if (currentNode.Url == this.Provider.CurrentNode.Url)
{
sb.AppendLine(@"<li class=""active"">" + currentNode.Title + "</li>");
}
else
{
sb.AppendLine(@"<li><a href=""" + currentNode.Url + @""">" + currentNode.Title + "</a></li>");
}
}
sb.AppendLine(@"</ul>");
writer.Write(sb.ToString());
}
}
Tento kód umístíme do .cs souboru (například BootstrapSiteMapPath.cs). Na stránce (většinou na master page) pak kontrol zaregistrujeme a použijeme klasickým způsobem:
<%@ Register TagPrefix="controls" Namespace="WebApplication.Controls" Assembly="WebApplication" %>
<controls:BootstrapSiteMapPath ID="breadcrumb" runat="server" />
Uvedený kód kontrolu by se také dal použít do ASP.NET MVC html helper třídy pro MVC SiteMap.