2009-06-02 11 views
8

Wie fügen Sie ein stark typisiertes Objekt in ASP.NET MVC in die Masterseite ein?Wie lege ich Daten in eine Masterpage?

Haben Sie eine ViewModelBase Klasse, die Masterseiteninformationen enthält und von ihr für jedes Ansichtsmodell erbt, oder gibt es einen besseren Ansatz?

+0

Gibt es ein gültiges Szenario dafür? In der allgemeinen Ansicht sollten bestimmte Inhalte in den Ansichten gerendert werden. Die Masterseite sollte nur allgemeine Elemente bereitstellen, die sich um die Ansicht der Ansicht herum befinden. –

+0

Vielleicht bin ich komplett hier, aber ich dachte, ich werde eine stark typisierte Ansicht verwenden, wenn ich Dinge wie derzeit angemeldeter Benutzername usw. der Masterpage hinzufügen muss. Wie sonst würde ich das tun, wenn nicht durch das ViewModel, das der Seite gegeben wird? – Alex

+0

Angenommen, Sie verwenden eine Standardauthentifizierungsmethode, z. Forms Authentication, dann kann das mit <% = HttpContext.Current.User.Identity.Name%> –

Antwort

10

Alex,

Ich denke, was Sie fragen, ist: "Wo meine Masterseite Controller ist?"

Schauen Sie sich den folgenden Link an. Es wird erläutert, wie Sie einen "Application Controller" erstellen, eine abstrakte Klasse, die von Ihren anderen Controllern vererbt werden kann, sodass Sie den Code nur einmal schreiben müssen, um die benötigten Masterseitendaten in die Ansicht zu übertragen.

Daten Passing to View Master Pages:
http://www.asp.net/learn/MVC/tutorial-13-cs.aspx

Außerdem haben Sie einen Blick auf den folgenden Link, der erklärt, wie Teilansichten und Subcontrollern in ASP.NET MVC implementieren:

Teil Anfragen in ASP.NET MVC
http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/

+0

Die erste Link scheint nicht mehr zu funktionieren. Das neue sollte sein [http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs] (http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs) –

3

Das ist genau der Ansatz, den ich verwende. Haben Sie eine MasterViewData-Basisklasse, die Informationen enthält, die allen Seiten gemeinsam sind und zum Rendern der Masterseite verwendet werden (angemeldeter Benutzer, wenn keine integrierten Nachrichten auf Seitenebene verwendet werden). Alle meine anderen View-Datenklassen sind davon abgeleitet.

Ich mache auch, was Robert erwähnt: Ich habe eine Basis-Controller-Klasse, die die View-Methode überschreibt, die tatsächlich behandelt, einige der Masterseiteninformationen in die Viewdata-Klassen zu setzen.

Ich bin neugierig, ob es andere Optionen gibt, aber dieser Ansatz hat definitiv gut für mich gearbeitet.

0

Wir verwenden eine ähnliche Basis ViewData, insbesondere für große inhaltsorientierte öffentliche Sites, wo Sie eine Menge gängige UI-Sachen haben.

Der Trick, den wir verwenden, um das gemeinsame Bit zu injizieren, besteht darin, einen ActionFilter zu verwenden, um das MasterPageViewModel um die Rückgabe unserer Controller zu injizieren. Das ist ein bisschen sauberer als eine spezielle Controller-Klasse mit einer überschriebenen View-Methode, da es definitiv Orte gibt, an denen man sie nicht will/braucht. Und die ganze Zusammensetzung über Erbschaft.

+0

Haben Sie Code-Beispiele Wyatt? Ich würde es lieben, wie du das geschafft hast. – lloydphillips

Verwandte Themen