2011-12-07 15 views
5

En mi proyecto MVC tiene 2 Áreas que es admin y cliente y necesito a la presentación de configuración dinámica para el lado del cliente, En _ViewStart (en el cliente) Archivo establecerá diseño para todos de la página cliente.cambio dinámico ViewStart camino trazado en MVC 3

Layout = "~/Views/Shared/_Layout.cshtml"; 

Así que si tenemos que cambiar el diseño del cliente podemos cambiar la ruta del archivo de diseño cshtml en _ViewStart archivo correcto? No puedo encontrar la manera de cambiar el interior archivo ViewStart o hay otra solución en este caso.

Gracias por su ayuda :)

Respuesta

11

Recuerde que cualquier cosa dentro del @{ ... } se trata como código . Por lo tanto, debería ser una simple cuestión de la colocación de una condición en la que hay que cambiar la forma en que ha heredado:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    if (User.Current.IsAuthenticated) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
    } 
} 

pesar de que está probaby mejor mirando Temas (y tener un tema admin/usuario). Como alternativa, puede hacer que su _Layout.cshtml más inteligentes y tienen que manejar los diferentes puntos de vista sobre la base de condiciones también.

Ver también: MVC3 Razor - Is there a way to change the Layout depending on browser request?

6

Su pregunta no tiene suficiente información para darle una muestra de código completo.

Pero básicamente se puede hacer esto

if (InsertIsAdminLogicHere) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} else { 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Si usted nos muestra cómo se determina administrador o no, nos puede proporcionar más ayuda.

esperanza esto ayuda

0

Usted puede tomar ventaja de anidadas diseños. Crea un controlador base y conduce todos los controladores desde este.

public class ControllerBase : Controller 
{ 
    public ControllerBase() 
    { 
     ViewBag.Theme = "~/Views/Shared/Default/Views/_Layout.cshtml"; 
    } 
} 

public class HomeController : ControllerBase 
{ 
    public ActionResult Index() 
    { 

     return View(); 
    } 
} 

_ViewStart.cshtml (no realiza ningún cambio en este archivo)

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Vistas/Shared/_Layout.cshtml Este es un archivo de formato de página predeterminada de Asp.NET MVC. Vacíe esto y reemplace estas líneas.

@{ 
    Layout = ViewBag.Theme; 
} 

@RenderBody() 

Puede modificar esta forma para Áreas. Se puede recuperar información de plantilla activa en BaseController de base de datos o donde quiera.

Por cierto, si usted quiere poner sus puntos de vista exterior del ~ búsqueda de carpetas/Vistas para ThemeableRazorViewEngine

0

en Vistas/_ViewStart.cshtml

@{  
object multiTenant; 
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant)) 
{ 
    throw new ApplicationException("Could not find tenant"); 
} 
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml"; 
}