2009-05-06 11 views
7

¿Existe una buena manera de asignar ViewData a las páginas maestras anidadas? Por ejemplo, en mi página maestra de nivel superior podría tener información sobre el usuario conectado. También tengo una página maestra anidada que se muestra cuando el usuario está en cualquier página departamental. Quiero que los datos estén disponibles SOLO en las páginas departamentales.asignando ViewData a las páginas maestras anidadas

Así que esto es lo que parece:

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

Así que cada vez que tengo una vista que utiliza la página maestra anidada que incluiría tanto ViewData [ "userData"] y ViewData [ "departmentalData"]. Pero si solo estoy usando la página maestra de nivel superior, entonces solo tengo ViewData ["userData"]. es posible?

Respuesta

1

Si insistes en utilizar ViewData como portador de datos para las páginas maestras (en lugar de usar Html.RenderAction (...) del proyecto MvcContrib que probablemente usaría), entonces, si puedes identificar en qué casos el se usará la página principal anidada, puede configurar un ActionFilter para ingresar los datos necesarios en ViewData ["departmentalData"].

0

Una posibilidad es escribir un método de extensión en ViewPage y ViewMasterPage para obtener los datos que necesita. No estoy seguro, pero creo que esto es lo que Rob Conery hizo en su paquete Commerce.MVC. Mira eso.

0

Tuvimos el mismo problema. Hasta ahora se nos ocurrió una clase base para todos los controladores y un método protegido para generar ViewData. Lo llamamos de todas las acciones que usan esta página maestra específica.

Definitivamente voy a seguir esta pregunta para ver lo que otros han inventado.

0

Hay un concepto de subcontroladores para MVC (no estoy seguro si esto todavía está presente y se abrirá camino en el marco de MVC). Puede encontrarlo en el proyecto mvc contrib en codeplex. Algunos descripción o entrada de blog se puede encontrar aquí ...

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

y los objetos que pasan a la sub-controlador se discute aquí ...

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

Esto no se basa en masterpages pero podría ayudarlo ...

0

Siempre que su controlador esté configurando los ViewData adecuados para la página que se verá, entonces no debería importar cuántas páginas maestras ar e siendo utilizado. ¿O me estoy perdiendo algo?

Cuestiones relacionadas