Bootstrap SiteMapPath (BreadCrumb)

Jan Holan       3. 4. 2014       ASP.NET WebForms, Komponenty       5764 zobrazení

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í.

image

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.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback