Eine Sitmap Datei dient als Steuerung der Navigation einer Web Page. Zur visualisierung kommt dann ein Menü oder Treeview Steuerelement zum Einsatz. Die Bindung wird über das SitemapDataSource Control hergestellt.
Eine Sitemap Datei enthält Elemente wie URL, Title oder Description. Die Frage ist allerdings, wie kann man zusätzliche Attribute verwenden um z.B. das Aussehen des Menüs per web.sitemap zu steuern. Hier in diesem Beispiel soll die Schriftfarbe aus der Sitemap Datei mit dem frei erfundenen Attribut Farbe definiert werden.
<? xml version="1.0" encoding="utf-8" ?>
< siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
< siteMapNode url="home.aspx" title="home" description="" farbe="red">
< siteMapNode url="eins.aspx" title="eins" description="" farbe="silver" />
< siteMapNode url="zwei.aspx" title="zwei" description="" farbe="green" />
</ siteMapNode>
</ siteMap> |
Die ASPX Seite enhält dann folgenden Code
< form id="form1" runat="server">
<div>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
</div>
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"
OnMenuItemDataBound="Menu1_MenuItemDataBound" Orientation="Horizontal" StaticDisplayLevels="2">
</asp:Menu>
</form> |
So und nun zum spannenden Teil. Jedesmal wenn ein neuer Node des Menüs erzeugt wird, wird auch das Ereignis MenuitemDataBound ausgeführt. Dort kann man per Dataitem auf die Daten und den Node aus der Sitemap zugreifen. Ausserdem kann man per e.Item auf den Node des Menüs zugreifen und so den Text manipulieren. Hier wurde nicht besonders schön aber kreativ einfach statt dem Text eine HTML Element zusammengebaut das die Schriftfarbe abbildet.
Protected Sub Menu1_MenuItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MenuEventArgs)
Dim node As SiteMapNode = CType(e.Item.DataItem, SiteMapNode)
e.Item.Text = "<font color=" + node("farbe") + ">" + e.Item.Text + "</font>"
End Sub |