Wir beginnen mit dem Wechsel von Web Forms zu MVC für alle neuen Anwendungen. Ich arbeite daran, unsere Masterseite zu portieren und versuche, die Anforderungen zu erfüllen, dass wir eine einzige Masterseite für alle Anwendungen benötigen. Die primäre Navigation für die Anwendung muss sich in einem Menü auf der Masterseite befinden. Dies zu erreichen war einfach, der schwierige Teil ist, dass jede Anwendung bestimmen muss, was im Menü angezeigt werden soll, indem ein eindeutiges Regelwerk verwendet wird. Einige Apps können einfach sagen, hier ist die Menüstruktur über etwas wie eine SiteMap zu verwenden. Andere müssen bestimmen, was im Menü angezeigt wird, basierend auf den Rollen, die der Benutzer hat, dies kann auch leicht mit einer SiteMap gehandhabt werden. Die Situation, mit der ich Probleme habe, ist, dass einige Apps die Menüs basierend auf den Rollen des Benutzers erstellen müssen, aber auch auf den Daten, an denen sie arbeiten. h. Derselbe Benutzer kann im Menü für eine Seite eine andere Option haben, wenn er an einem Objekt 'foo' arbeitet, als wenn er an einem Objekt 'bar' arbeitet.Bereitstellen von Daten im Menü in meiner ASP.NET MVC-Masterseite
Was ich an dieser Stelle getan habe, ist, dass ich einen HtmlHelper erstellt habe, der von der Masterseitenansicht aufgerufen wird und eine Liste von Objekten eines benutzerdefinierten Typs annimmt und eine ungeordnete Liste zurückgibt, die von einem jQuery-Plugin formatiert wird um das Menü anzuzeigen. Die Liste der Objekte, die die Hilfsmethode verwendet, wird mit dem Dictionary ViewData an die Ansicht übergeben. Derzeit wird der Wert dieses ViewData-Knotens im Konstruktor jedes Controllers festgelegt. Dadurch kann für jede Seite und möglicherweise für jede Methode ein anderes Menü festgelegt werden, ohne dass der Wert für jede Aktionsmethode festgelegt werden muss, es sei denn, sie ist erforderlich. Ich habe auch eine Klasse erstellt, die eine SiteMap analysiert und die Liste der Elemente zurückgibt, die zum Erstellen des Menüs erforderlich sind. Mit dieser Klasse setze ich den ViewData-Wert im Controller ein. Wenn eine Anwendung mehr Kontrolle darüber benötigt, wie die Menüdaten generiert wurden, könnten sie ihre eigene Klasse erstellen, um die Daten zu generieren, solange sie eine Liste des richtigen Objekttyps zurückgibt.
Diese Lösung scheint bisher gut zu funktionieren, sie fühlt sich aus irgendeinem Grund nicht richtig an. Ich hoffe, dass ich entweder ein paar Ideen für einen besseren Weg oder eine Bestätigung dafür bekommen kann, dass dies ein gültiger Ansatz zur Lösung dieses Problems ist.
nur kommentieren wollte, dass dies wahrscheinlich so gut ist eine Lösung, wie ich weiß, da das Szenario, dass jede Seite/Aktion Möglicherweise müssen Sie das Menü bearbeiten. (Ansonsten finde ich Html.RenderAction etwas sinnvoller, aber nur wenn das Menü etwas statischer definiert ist - wie eine Benutzerrolle - und ändert sich nicht pro Seite) –
Ich dachte über die Erstellung eines Basis-Controllers nach, aber seit dem ist es möglich dass jede Seite/Aktion eine andere Menüquelle benötigt, die so aussieht, als würde sie nicht so gut funktionieren. – Hamman359
Wenn jede Seite/Aktion ein neues Menü vorgibt, dann erstellen Sie einen Basis-Controller mit einer Methode, die den Controller und die Aktion übernimmt und dann die ViewData ausspuckt. – Martin