1. Einleitung
Jede Website, die aus mehreren Seiten besteht, benötigt eine Art Navigations-Benutzeroberfläche, die in zwei Schritten erstellt wird. Zuerst muss die logische Struktur der Site definiert werden. Anschließend werden Benutzeroberflächenelemente hinzugefügt, damit Benutzer zwischen verschiedenen Teilen der Site-Struktur hin und her wechseln können. Vor ASP.NET 2.0 mussten Entwickler diese beiden Probleme selbst lösen. Ab Version 2.0 bietet ASP.NET jedoch eine einfache Möglichkeit, die Struktur einer Site zu definieren, und enthält eine Reihe von Websteuerelementen, die speziell für die Anzeige der Site-Navigationsbenutzeroberfläche entwickelt wurden.
Im vorherigen Artikel haben wir analysiert, wie man mithilfe von Navigations-Websteuerelementen eine XML-Sitemap-Datei „Web.sitemap“ erstellt und wie man Site-Navigationsinformationen anzeigt, darunter:
· SiteMapPath, das einen Breadcrumb anzeigt (Home>Electronics>XBOX)
·TreeView, das Zeigt einen zusammenklappbaren, vertikal angezeigten Baum an, der zur Anzeige der gesamten Sitemap-Hierarchie verwendet wird
und ein horizontal oder vertikal ausgerichtetes Menü anzeigt.
Der vorherige Artikel stellte nur eine Funktion und Fähigkeit für die Sitemap-Datei und die Navigations-Websteuerung bereit . In diesem Abschnitt konzentrieren wir uns auf die programmgesteuerte Steuerung von Sitemap-Informationen und untersuchen die SiteMapPath-Navigations-Websteuerung im Detail.
2. Sitemap
Die Beispiele in diesem Artikel verwenden die im ersten Teil erstellte Sitemap. Die genaue Syntax der Sitemap-XML-Datei können Sie in Teil 1 einsehen oder am Ende dieses Artikels herunterladen. Eine grafische Darstellung der in diesen Beispielen verwendeten Site-Struktur ist unten dargestellt:
3. Programmgesteuerte Sitemap
Eine Sitemap ist eine Sammlung verknüpfter Sitemap-Knoten. Normalerweise enthält jeder Sitemap-Knoten einen Titel, eine URL und eine Beschreibung. Das oben gezeigte Bild ist ein Beispiel für eine Sitemap, bei der jedes Rechteck einen Sitemap-Knoten darstellt. ASP.NET erfordert kein bestimmtes Format zum Angeben von Sitemaps, bietet jedoch die Standardoption zur Verwendung einer XML-Formatdatei. (Weitere Informationen zu XML-Dateien finden Sie in Teil 1.)
ASP.NET stellt eine Klasse namens SiteMap bereit, die schreibgeschützten, programmgesteuerten Zugriff auf die Sitemap ermöglicht. Diese Klasse wird intern von zwei Steuerelementen verwendet, die wir später in diesem Artikel analysieren werden:
SiteMapPath – Erzeugt einen Breadcrumb basierend auf dem Speicherort der besuchten Seite und ihrer Site-Struktur. Insbesondere beginnt der SiteMapPath an dem Knoten, der von der SiteMap.CurrentNode-Eigenschaft zurückgegeben wird, und durchläuft die Hierarchie nach oben bis zum Stamm.
· SiteMapDataSource – Dieses Steuerelement erstellt eine hierarchische Datenquelle – es bildet die Struktur der Sitemap ab. Um Sitemap-Informationen in einem anderen Web-Steuerelement wie TreeView oder Menu anzuzeigen, fragt das Web-Steuerelement die Sitemap nicht direkt ab, sondern bindet sie an ein SiteMapDataSource-Steuerelement, das für das Lesen der Sitemap-Struktur verantwortlich ist.
Die SiteMap-Klasse verfügt über zwei Eigenschaften: RootNode und CurrentNode. Beide Eigenschaften geben SiteMapNode-Instanzen zurück. Die SiteMapNode-Klasse stellt einen in der Sitemap definierten Knoten dar und verfügt über Eigenschaften, die den Knoten beschreiben – Titel, URL und Beschreibung – sowie Eigenschaften, die die Hierarchie programmgesteuert steuern – ParentNode, ChildNodes, NextSibling, PreviousSibling usw.
Sie können die SiteMap-Klasse in Ihren eigenen ASP.NET-Seiten verwenden. Beispielsweise können wir auf jeder Seite die Links „Next“, „Previous“ und „Up“ anzeigen – indem wir einfach drei HyperLink-Steuerelemente zur Hauptseite der Site hinzufügen und ein wenig programmieren, um zu prüfen, ob der CurrentNode über einen NextSibling, PreviousSibling oder ParentNode verfügt. Insbesondere fügen Sie Ihrer Hauptseite das folgende Markup hinzu:
[<asp:HyperLink ID="lnkPrev" runat="server">Prev</asp:HyperLink>] |
[<asp:HyperLink ID="lnkUp" runat="server">Up</asp:HyperLink>] |
[<asp:HyperLink ID="lnkNext" runat="server">Next</asp:HyperLink>]
Der Page_Load-Ereignishandler der Hauptseite sieht wie folgt aus:
If SiteMap.CurrentNode IsNot Nothing Then
'Legen Sie den nächsten/vorherigen/up-Link fest. Wenn SiteMap.CurrentNode.PreviousSibling IsNot Nothing Then ist
lnkPrev.NavigateUrl = SiteMap.CurrentNode.PreviousSibling.Url
lnkPrev.Text = "< Prev (" & SiteMap.CurrentNode.PreviousSibling.Title & ")"
Anders
lnkPrev.NavigateUrl = String.Empty
lnkPrev.Text = "< Prev"
Ende wenn
Wenn SiteMap.CurrentNode.ParentNode nicht nichts ist, dann
lnkUp.NavigateUrl = SiteMap.CurrentNode.ParentNode.Url
lnkUp.Text = "Up (" & SiteMap.CurrentNode.ParentNode.Title & ")"
Anders
lnkUp.NavigateUrl = String.Empty
lnkUp.Text = "Nach oben"
Ende wenn
Wenn SiteMap.CurrentNode.NextSibling nicht nichts ist, dann
lnkNext.NavigateUrl = SiteMap.CurrentNode.NextSibling.Url
lnkNext.Text = "(" & SiteMap.CurrentNode.NextSibling.Title & ") Weiter >"
Anders
lnkNext.NavigateUrl = String.Empty
lnkNext.Text = "Weiter >"
Ende wenn
Ende Wenn
Dadurch werden drei Hyperlinks „Weiter“, „Nach oben“ und „Zurück“ zu jeder Seite hinzugefügt, die von der Hauptseite erbt, siehe Schnappschuss unten.
4. Verwenden Sie das SiteMapPath-Steuerelement, um Breadcrumbs anzuzeigen.
Das SiteMapPath-Steuerelement zeigt einen Breadcrumb an – es wird verwendet, um Benutzern anzuzeigen, wo sie sich in der Site-Struktur befinden. Die Ausgabe des SiteMapPath-Steuerelements wird durch die folgenden drei Faktoren bestimmt:
· die Struktur der Site, wie
durch die Sitemap definiert,
· die besuchte Seite und
· die Eigenschaftswerte des SiteMapPath-Steuerelements
Wenn auf ein SiteMapPath-Steuerelement zugegriffen wird, versucht das SiteMapPath-Steuerelement, die URL der Seite in den URL-Wert eines in der Sitemap definierten Sitemap-Knotens umzuwandeln. Wenn eine Übereinstimmung gefunden wird, durchläuft das Steuerelement die Struktur bis zum Stamm und erzeugt die folgende Ausgabe: RootNode>ParentNode>...>ParentNode>CurrentNode. Der CurrentNode ist hier der Titel des Sitemap-Knotens – er wird verwendet, um die URL der aktuellen Seitenanforderung abzubilden; RootNode und ParentNodes werden als Hyperlinks generiert, wenn der Sitemap-Knoten einen in der Sitemap definierten URL-Wert hat. Ein SiteMapPath-Steuerelement auf der Seite „History Books“ (Books/History.aspx) generiert Home>Books>History sowie Home und Books in Form von Hyperlinks, die jeweils auf Default.aspx und Books/Default.aspx verweisen . . Beim Zugriff auf Books/Default.aspx generiert SiteMapPath Home>Books.
Um es ganz klar zu sagen: Die Ausgabe von SiteMapPath hängt sowohl von der Sitemap selbst als auch von der besuchten Seite ab. Die Ausgabe des SiteMapPath kann über die Eigenschaften dieses Steuerelements angepasst werden. Es gibt einige Eigenschaften im Standard-Web-Steuerelementformat – BackColor, Font, ForeColor usw. – und einige spezifische Einstellungen für SiteMapPath, darunter:
u PathDirection – kann einen von zwei Werten annehmen: RootToCurrent (Standard) oder CurrentToRoot. Wenn der Wert „RootToCurrent“ lautet, wird der Breadcrumb auf der Seite „Verlaufsbücher“ als „Startseite“ > „Bücher“ > „Verlauf“ generiert. Wenn der Wert „StromWurzel“ lautet, lautet die Ausgabe „Verlauf > Bücher > Startseite“.
·PathSeparator – gibt die Zeichenfolge an, die zum Trennen der einzelnen Knoten im Breadcrumb verwendet wird; der Standardwert ist >
·RenderCurrentNodeAsLink – ein boolesches Attribut – es gibt an, ob der CurrentNode als Link generiert werden soll;
·ParentLevelsDisplayed – ein ganzzahliger Wert – kann verwendet werden, um die Höhe der im Breadcrumb angezeigten Baumstruktur zu begrenzen. Standardmäßig ist der Wert dieses Attributs -1, was bedeutet, dass es keine Begrenzung gibt; wenn der Wert auf 1 gesetzt wird, wird auf der Seite „Verlaufsbücher“ der Breadcrumb „Bücher“ > „Verlauf“ generiert. Der Stamm ist nicht enthalten, da das SiteMapPath-Steuerelement nur bis zu einem übergeordneten Element durchläuft – von „Verlauf“ bis „Buch“.
· ShowToolTips – Wenn ein Sitemap-Knoten einen Beschreibungswert hat, wird die Beschreibung als Tooltip-Text für jeden Breadcrumb-Knoten angezeigt, wenn diese Eigenschaft auf True (Standard) gesetzt ist.
Es gibt auch Stileigenschaften, die zum Festlegen von BackColor, Font, ForeColor usw. verwendet werden können – für verschiedene Teile des SiteMapPath-Steuerelements. Sie können die NodeStyle-Eigenschaft verwenden, um das Erscheinungsbild der Knoten im Breadcrumb anzupassen; Sie können RootNodeStyle und CurrentNodeStyle verwenden, um den ersten und letzten Knoten im Breadcrumb weiter anzupassen. Im Allgemeinen ist die einfachste und ästhetischste Art, das SiteMapPath-Steuerelement zu formatieren, die Verwendung des Assistenten „Automatische Formatierung“ – dies kann über das sensible Tag des Steuerelements aktiviert werden.
5. Passen Sie die generierte Ausgabe mit Vorlagen an.
Der SiteMapPath enthält vier Vorlagen – sie ermöglichen eine weitere Anpassung der generierten Ausgabe. Mit Vorlagen können Sie statisches HTML-Markup, Web-Steuerelemente und Datenbindungssyntax kombinieren. Wenn Sie bereits DataList- oder Repeater-Steuerelemente verwendet haben, sind Sie bereits mit Vorlagen vertraut. Vorlagen in ASP.NET 2.0 sind grundsätzlich dieselben wie in ASP.NET 1.x, mit der Ausnahme, dass ASP.NET 2.0 eine neue, prägnantere Syntax für Datenbindungsausdrücke einführt. Beispielsweise müssen Sie in ASP.NET 1.x die Syntax <%# DataBinder.Eval(Container.DataItem, PropertyName) %> verwenden, um den Wert einer Spalte abzurufen. In ASP.NET 2.0 kann diese alte Syntax weiterhin verwendet werden, Sie können jedoch optional die kürzere Version <%# Eval(PropertyName) %> verwenden.
Standardmäßig generiert SiteMapPath Stamm- und übergeordnete Knoten als reguläre Hyperlinks, sodass Benutzer, wenn sie auf den Link klicken, schnell in der Struktur der Steuerhierarchie zurück nach oben gelangen können. Möglicherweise möchten Sie jedoch eine serverseitige Verarbeitung durchführen, bevor Sie die Informationen an den Benutzer zurücksenden. Vielleicht möchten Sie aufzeichnen, wohin der Benutzer geht, oder alle Änderungen, die er an der Seite vornimmt, automatisch speichern. Dies kann erreicht werden, indem eine Vorlage verwendet und der Knoten als LinkButton generiert wird.
Wenn Sie beispielsweise nur den Stammknoten von SiteMapPath als LinkButton generieren möchten, können Sie mit dem folgenden Tag ein <RootNodeTemplate> zum SiteMapPath-Steuerelement hinzufügen:
<asp:SiteMapPath ID="SiteMapPath1" runat="server" >
<RootNodeTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
Text='<%# Eval("title") %>'
CommandArgument='<%# Eval("url") %>'
OnCommand="LinkButton1_Command">
</asp:LinkButton>
</RootNodeTemplate>
</asp:SiteMapPath>
Dieses Tag fügt dem SiteMapPath ein LinkButton-Steuerelement hinzu – seine Text-Eigenschaft wird der Title-Eigenschaft des entsprechenden SiteMapNode zugewiesen. Wenn auf den LinkButton geklickt wird, wird ein Postback ausgelöst und das Command-Ereignis des Steuerelements ausgelöst – dadurch wird der LinkButton1_Command-Ereignishandler aktiviert. Die URL-Eigenschaft des SiteMapNode wird über die CommandArgument-Eigenschaft an diesen Ereignishandler übergeben. In diesem Ereignishandler können Sie jede erforderliche serverseitige Verarbeitung durchführen und den Benutzer dann über Response.Redirect(e.CommandArgument) zu der von ihm angeforderten Seite weiterleiten.