2009-05-06 2 views
7

Esiste un modo valido per assegnare ViewData alle pagine master nidificate? Ad esempio, nella mia masterpage di primo livello potrei avere informazioni sull'utente che ha effettuato l'accesso. Ho anche una masterpage annidata che viene visualizzata quando l'utente si trova su una qualsiasi pagina dipartimentale. Voglio che i dati siano disponibili SOLO sulle pagine dipartimentali.assegnazione di ViewData a pagine master nidificate

Quindi questo è come appare:

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

Così ogni volta che ho una visione che utilizza la pagina master nidificate sarebbe includere sia Viewdata [ "userData"] e Viewdata [ "departmentalData"]. Ma se sto usando solo la pagina principale di livello superiore, ho solo ViewData ["userData"]. È possibile?

risposta

1

Se si desidera utilizzare ViewData come portante di dati per le pagine master (invece di utilizzare Html.RenderAction (...) dal progetto MvcContrib che probabilmente utilizzerò), quindi se è possibile identificare in quali casi il verrà utilizzata la pagina principale annidata, è possibile impostare un filtro di azione per immettere i dati necessari in ViewData ["departmentalData"].

0

Una possibilità è scrivere un metodo di estensione su ViewPage e ViewMasterPage per ottenere i dati necessari. Non ne sono sicuro, ma penso che questo sia ciò che Rob Conery ha fatto nel suo pacchetto Commerce.MVC. Dai un occhiata a questo.

0

Abbiamo avuto lo stesso problema. Finora abbiamo creato una classe base per tutti i controller e un metodo protetto per generare ViewData. Lo chiamiamo da tutte le azioni che utilizzano questa specifica pagina principale.

Seguirò sicuramente questa domanda per vedere cosa gli altri hanno trovato.

0

Esiste un concetto di subcontrollori per MVC (non sono sicuro se questo è ancora presente e si farà strada nel framework MVC). Puoi trovarlo nel progetto contrib in mvc su codeplex. Alcuni descrizione o blog può essere trovato qui ...

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

e passando per gli oggetti che subcontroller è discusso qui ...

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

Questo non è basata su masterpages ma potrebbe aiutarti ...

0

Fintanto che il controller sta impostando il ViewData corretto per la pagina che verrà visualizzata, non dovrebbe importare quante pagine master e in uso. O mi sta sfuggendo qualcosa?