Thomas Bandt

Über mich | Kontakt | Archiv

[ASP.NET 2.0] Navigations-Buttons "aktiv setzen"

Im Normalfall generiere ich die Navigationsstrukturen der Websites, die ich aufsetze, automatisch aus der Datenbank - da ich dafür unser CMS verwende.

In manchen Fällen würde man aber mit einem CMS wie mit Kanonen auf Spatzen schießen, da ist es einfach sinnvoller einzelne Webforms zu verwenden. Nun kann man auch hier schnell von Hand eine Sitemap schreiben und das Menu-Control verwenden, aber oft ist selbst das zu viel, und man setzt einfach in die Masterpage eine Reihe von HyperLink-Controls zu den einzelnen Seiten.

Nun das alte Problem: ruft man eine der Seiten auf, möchte man diese in der Navigation gerne markieren, etwa fett hervorheben - damit der Benutzer auch weiß, wo er sich befindet. Hierfür gibt es tausend Möglichkeiten, man kann beispielsweise ganz dreckig in einem Switch die einzelnen Urls durchgehen und mit der aktuellen vergleichen ...

... oder aber man automatisiert das so, dass man sich um gar nichts mehr zu kümmern braucht, egal welche Seiten man hinzufügt.

Schritt 1:

Man packt alle HyperLink-Controls der Navigation in ein Panel-Control:

"ShowNavigation" runat="server" Visible="true">
   

"PageNavigationBar">
         ID="NavOverview" 
      NavigateUrl="~/Default.aspx" 
      runat="server" 
      Text="Overview" />
         ID="NavPost" 
      NavigateUrl="~/Post.aspx" 
      runat="server" 
      Text="Add Blog Post" />
   

Schritt 2:

Im CodeBeside läuft man nun über alle Controls in ShowNavigation, schaut ob es sich um Hyperlinks handelt, vergleicht deren NavigateUrl-Eigenschaft mit der aktuellen URL, und markiert sie ggf.

foreach(Control ctrl in ShowNavigation.Controls)
{
   if (ctrl is HyperLink)
   {
      HyperLink hl = (HyperLink)ctrl;
      if (Page.ResolveUrl(Request.Path).ToLower().Equals(
         Page.ResolveUrl(hl.NavigateUrl).ToLower()))
      {
         hl.Attributes.Add("style", "font-weight: bold");
         break;
      }
   }
}

Und fertig ist die voll automatisierte Markierungsmaschine ;-).



« Zurück  |  Weiter »