Verwenden mehrerer MvcSiteMaps

8

Ich habe kürzlich eine Straßensperre getroffen, die versucht, den MvcSiteMapProvider zu verwenden.

In meiner Bewerbung habe ich drei verschiedene Bereiche: Landung, Bewerbung und Verwaltung. Ich habe derzeit den MvcSiteMapProvider implementiert und es funktioniert erstaunlich, aber was ich jetzt versuche - benutze den Html MvcSiteMap Helper und spezifiziere einen anderen Kartenanbieter abhängig von dem Gebiet in dem ich mich befinde.

Also, wenn ich:

  • Im Bereich "Admin" - Ich möchte den Provider "AdminSiteMapProvider" verwenden.
  • Im Bereich "Anwendung" möchte ich den Provider "AppSiteMapProvider" verwenden.

Ich habe Folgendes versucht:

Freigegeben - & gt; _AppLayout.cshtml

%Vor%

Freigegeben - & gt; _Menu.cshtml

%Vor%

}

Irgendwelche Vorschläge? Ich möchte den _AppLayout.cshtml-Inhalt nicht nur für einen Bereich in einen neuen Master kopieren / einfügen müssen, ich möchte lieber den richtigen Provider dynamisch auswählen.

    
Kori 24.02.2012, 19:00
quelle

4 Antworten

8

Fügen Sie in Ihrer Datei web.config (einen neuen Anbieter für jeden Bereich) etwas wie folgt hinzu:

%Vor%

Fügen Sie dies in Ihre gemeinsame Hauptseite ein (dasselbe gilt für das Menü):

%Vor%

Und schließlich erstellen Sie eine Sitemap-Datei für jeden Bereich.

Es funktioniert für mich. Hoffe es hilft.

    
Cristi Todoran 28.02.2012, 07:31
quelle
5

Mehrere Sitemaps in einer Anwendung erklärt, wie dies in v4 gemacht wird, Das hat sich ziemlich geändert von der angenommenen Antwort - was für v3 und vorher war.

Der Hauptunterschied besteht darin, dass jetzt mehrere Sitemaps mit DI konfiguriert werden und Sie ISiteMapCacheKeyGenerator und / oder ISiteMapCacheKeyToBuilderSetMapper implementieren müssen. Dies sind kleine Klassen, die MvcSiteMapProvider mitteilen, wie die eingehenden HTTP-Anforderungen jeder Sitemap zugeordnet werden.

    
NightOwl888 20.08.2013 00:28
quelle
5

Ich verwende Version 4, für die die genannten Provider anscheinend nicht funktionieren. Die vorgeschriebene Möglichkeit, mehrere Sitemaps in v4 zu haben erschreckte den Bejeebus aus mir heraus und war viel mehr Arbeit als ich wollte.

In dem Vorschlag von @ NightOwl888, seine eigene Antwort zu kommentieren, habe ich die Option helpers in v4 verwendet. Ich habe immer noch nur eine mvc.sitemap-Datei, aber ich habe gegenseitig ausschließende Sichtbarkeitsoptionen.

Schritt 1: Fügen Sie diese Einstellung in web.config

hinzu %Vor%

Schritt 2: Wählen Sie die Namen Ihrer verschiedenen "Menüs" und wenden Sie sie auf das Attribut visibility auf jedem Knoten an. In meinem Fall hatte ich "Regular" und "Admin". Auch dies sind alle in der gleichen mvc.sitemap-Datei.

%Vor%

Sie werden feststellen, dass die Links "Berichte", "Downloads" und "Dokument" sowohl für normale Benutzer als auch für Administratoren verfügbar sind, aber da der Administrator diese Optionen selten verwendet, wollte ich sie in das Untermenü Misc einfügen.

Schritt 3: Entscheiden Sie in Ihrem _Layout.cshtml, welches Menü Sie anzeigen möchten.

%Vor%

Ich habe diese bootstrap / sitemap tutorial , wenn Sie nicht sind, können Sie einfach @Html.MvcSiteMap().Menu(new { name = "MENUNAME" })

aufrufen     
viggity 23.12.2014 19:52
quelle
2

Dies ist, was ich getan habe (basierend auf dieser Frage). es ist ein wenig einfacher, hoffe es hilft. Ich habe meinen Site Map Provider nach dem Bereich benannt oder "default".

%Vor%     
Andrew Backer 06.07.2012 10:30
quelle