Mit Web.SiteMap mit Dynamischen URLS (URL-Routing)
Ich würde gerne match "circa" - Spiele im Web.SiteMap
Web.Sitemap statischen sitemap-provider funktioniert gut, außer für eine Sache. ES IST STATISCH!
So, wenn ich ein sitemapnode für jede der 10.000 Artikel auf meiner Seite etwa so :
- site.com/articles/1/article-title
- site.com/articles/2/another-article-title
- site.com/articles/3/another-article-again
- ...
- site.com/articles/9999/the-last-article
Ist es eine Art Wildcard-mapping kann ich mit der XML-SiteMap zu entsprechen, Alles unter den Artikeln?
Oder vielleicht in meinem Webforms Seite, gibt es eine Möglichkeit zum Manuellen einstellen des aktuellen Knoten?
Ich habe ein "bisschen" Hilfe auf auf dieser Seite, wenn dies mit der ASP.Net MVC-Framework, aber noch auf der Suche nach einer guten Lösung für Webforms.
Ich denke, was ich werde tun müssen ist, erstellen Sie eine benutzerdefinierte XML-SiteMap-Provider
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die Antwort auf den Kommentar oben. Ich kann mich nicht poste den vollständigen code, aber das ist im Grunde wie meinem provider funktioniert.
Angenommen, Sie haben eine Seite Artikel.aspx, und es verwendet den query-string-parameter "id" abrufen und anzeigen von einem Artikel, Titel und Körper. Dann ist das im Web.sitemap:
Dann erstellen Sie diese Klasse:
Schließlich, Sie diesen Anbieter verwenden in Ihrem code, wie Sie möchten, verwenden Sie die static-Anbieter.
Meiner Klasse ist komplizierter als das, aber diese sind die Grundlagen. Statt mit einem querystring-parameter, können Sie einfach analysieren die friendly url, die Sie verwenden, und verwenden Sie stattdessen zum abrufen der richtigen Inhalte. Zur Minimierung der zusätzlichen db-lookups mit jeder Anforderung, können Sie einen caching-Mechanismus, um die Anbieter (Artikel-Titel in der Regel nicht Häufig ändern).
Hoffe, das hilft.
Dies ist nicht ganz eine Antwort auf Ihre Frage denke ich, aber vielleicht gibt es Ihnen eine Idee. Ich schrieb einmal ein DynamicSiteMapPath Klasse Erben SiteMapPath. Ich verwende ein benutzerdefiniertes Attribut in jedem
<siteMapNode>
tag im Web.sitemap, wie diese:Dann die DynamicSiteMapPath Klasse bekommt die "id" - parameter Wert, ruft den Inhalt aus der Datenbank, und überschreibt die aktuell gerenderte XML-sitemap-Element-Knoten mit dem korrekten Titel und link. Es ist gonna take ein wenig Arbeit, aber wenn es richtig gemacht ist dies eine sehr schöne Möglichkeit, die dynamische Seite zu unterstützen.
Ich schon laufen in dieses problem und, ehrlich gesagt, nicht finden von Lösungen, die mich glücklich gemacht hat... damit ich mir Ideen von hier und da. Meine Lösung ist multi-Teil: a) die SiteMapProvider hier finden Sie die aktuelle Seite die Bearbeitung des Antrages und den Knoten, und b) verwenden Sie standard-Techniken für die Aktualisierung der sitemapnode von dort.
A) das problem, Das ich ständig laufen in ist, dass wenn ich nicht die richtigen virtuellen Pfad, der SiteMap.CurrentNode wäre null und das Feuer der SiteMapResolve Funktion. Um dieses Problem zu lösen ich-Unterklassen XmlSiteMapProvider und überschrieb CurrentNode:
Grundsätzlich, wenn die default-Implementierung nicht nichts finden, suchen Sie bis die route (falls vorhanden) und versuchen, den Knoten finden, der mit dem hf virtuellen Pfad.
Referenz hier ist ein Teil meines Web.Config, Global.asax und SiteMap-Dateien:
Hinzufügen der Anbieter
Die route:
Und die XML-SiteMap:
B) ich eine Unterklasse System.Web.UI.Seite, treffend benannt, BaseClass, die fügt eine Methode zum registrieren von Handlern für die SiteMapResolve Veranstaltung:
Ich noch brauchen, um die URLs entsprechend (das würde die URL der Seite, Erhalt der route), die sans-routing-Informationen. Ich werde wahrscheinlich verwenden Sie ein benutzerdefiniertes Attribut in der XML-sitemap zu sagen, der Knoten, wie zum Rendern der URL.