2009-05-06 9 views
7

Gibt es eine gute Möglichkeit, ViewData verschachtelten Masterseiten zuzuordnen? Zum Beispiel könnte ich in meiner Top-Level-Hauptseite Informationen über den angemeldeten Benutzer haben. Ich habe auch eine verschachtelte Masterpage, die angezeigt wird, wenn sich der Benutzer auf einer Abteilungsseite befindet. Ich möchte, dass diese Daten NUR auf Abteilungsseiten verfügbar sind.Zuweisen von ViewData zu verschachtelten Masterseiten

Also das ist, wie es aussieht:

Top Level Master Page - Includes ViewData["userData"] 
    | 
    | 
    ---> Nested Master Page - Includes ViewData["departmentalData"] 

Also, wenn ich eine Ansicht, die die geschachtelte Masterseite verwendet sie beide Viewdata umfassen würde [ „userdata“] und Viewdata [ „departmentalData“]. Aber wenn ich nur die Top-Level-Master-Seite verwende, dann habe ich nur ViewData ["userData"]. Ist das möglich?

Antwort

1

Wenn Sie darauf bestehen, ViewData als Datenträger für die Masterseiten zu verwenden (anstatt Html.RenderAction (...) aus dem MvcContrib-Projekt zu verwenden, das ich wahrscheinlich verwenden würde), dann können Sie in welchen Fällen die verschachtelte masterpage verwendet wird, können Sie einen ActionFilter einrichten, um die benötigten Daten in ViewData ["departmentalData"] einzugeben.

0

Eine Möglichkeit besteht darin, eine Erweiterungsmethode auf ViewPage und ViewMasterPage zu schreiben, um die benötigten Daten zu erhalten. Ich bin mir nicht sicher, aber ich denke, das hat Rob Conery in seinem Paket Commerce.MVC gemacht. Sieh dir das an.

0

Wir hatten das gleiche Problem. Bisher haben wir eine Basisklasse für alle Controller und eine geschützte Methode zur Generierung der ViewData entwickelt. Wir nennen es von allen Aktionen, die diese spezifische Masterseite verwenden.

Ich werde auf jeden Fall dieser Frage folgen, um zu sehen, was andere sich ausgedacht haben.

0

Es gibt ein Konzept von Subcontrollern für MVC (ich bin mir nicht sicher, ob dies noch vorhanden ist und im MVC-Framework seinen Weg finden wird). Sie finden es im mvc contrib-Projekt auf Codeplex. Einige Beschreibung oder Blog-Post finden Sie hier ...

http://mhinze.com/subcontrollers-in-aspnet-mvc/

und das Bewegen von Objekten zu diesem Subzentrale wird hier diskutiert ...

http://mhinze.com/passing-objects-to-subcontrollers/

Diese nicht auf Masterpages basiert aber könnte Ihnen helfen ...

0

Solange Ihr Controller die richtigen ViewData für die Seite einstellt, die angezeigt wird, sollte es nicht darauf ankommen, wie viele Masterseiten ar sind e wird benutzt. Oder fehlt mir etwas?