2008-11-07 16 views
5

Tengo el requisito de admitir diferentes páginas maestras en mi aplicación (ASP.NET MVC). ¿Cuál es la forma recomendada de:Plantilla maestra que cambia dinámicamente en ASP.NET MVC

  1. Pase el nombre de la página maestra a la vista.
  2. Almacene la página maestra (en sesión, o algo así) para que se quede durante la visita del usuario.

Respuesta

9

usar un controlador base personalizado y heredan de ella en su lugar:

Public Class CustomBaseController 
    Inherits System.Web.Mvc.Controller 

    Protected Overrides Function View(ByVal viewName As String, ByVal masterName As String, ByVal model As Object) As System.Web.Mvc.ViewResult 

     Return MyBase.View(viewName, Session("MasterPage"), model) 

    End Function 

End Class 

puse mi variable de sesión en el Session_Start global.asax:

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) 

//programming to figure out your session 
Session("MasterPage")="MyMasterPage" 

End Sub 
+0

Esta es una respuesta excelente, solo para actualizarla ligeramente en MVC3 también puede crear un motor de visualización de Razor personalizado que puede estar más limpio: http: // weblogs .asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx – Liam

0

puede lanzar el nombre de la página maestra en la sesión, pero las sesiones no son confiables. Yo recomendaría tirarlo en un db en su lugar.

una vez que esté en la página, puede cambiar/configurar la página maestra accediendo a page.masterpagefile. es una cadena; simplemente pase el nombre .master.

-2

¿Por qué no mantener la página maestra en el perfil del usuario? Luego, simplemente cámbielo en el evento PreLoad.

http://www.odetocode.com/articles/440.aspx

+0

estoy usando ASP .NET MVC. ¿No debería el controlador decidir qué página usar? – pgb

+0

sí. Probablemente deberías usar un controlador base. –

+0

La pregunta menciona específicamente que es para ASP.NET MVC y no para ASP.NET – Suhas

Cuestiones relacionadas