none
usar más de un layout y viewstart RRS feed

  • Pregunta

  • Buenos días,

    Necesito hacer una aplicación para una materia de la Facultad. Estoy usando MVC 5 y ya que está por defecto Identity.

    La idea es que el sitio cuente con dos secciones, una pública y otra restringida o privada.

    La pública, es el típico login, como también pantallas para recuperar usuario y/o contraseña como también registrarse en el sistema.

    Luego la parte restringida o privada es la aplicación en si, en la cual los usuarios registrados sólo tienen acceso (luego se restringirá por roles los controladores).

    La cuestión es que hasta el momento tengo un único "layout" que contiene las referencias a los css y los scripts, "pero también tiene un navbar con el menu".

    Mi idea es que la sección pública tenga el típico esquema html5 con las referencias a los css y scripts, pero "sin navbar, osea, sin menu" y la sección privada igual pero con navbar. 

    Por lo tanto pensaba en tener dos layouts y dos viewstart.

    Resumiendo, quisiera saber si al tener dos secciones de vistas (una pública y otra privada), puedo tener dos _viewstart que hagan referencia a dos layouts distintos, para no tener que especificar en cada vista en layout de cada vista de cada sección. Como podría hacerlo si es que se puede.

    Agradecería sus ideas, comentarios, sugerencias, como también referencias para leer, ya que estuve buscando, pero información específica no encontré.

    Saludos!.


    • Editado JuanFN miércoles, 10 de diciembre de 2014 12:36
    miércoles, 10 de diciembre de 2014 12:33

Todas las respuestas

  • Cree un nuevo _ViewStart.cshtml en el folder raíz que contendrá todas las vistas restringidas.  Algo como:

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

    Ese sería el contenido del archivo _Viewstart.cshtml en el folder Views/Restringido.  Como verá, apunta a una nueva plantilla también en el folder raíz de las vistas restringidas.

    Luego simplemente cree la nueva plantilla.  Si desea que la nueva plantilla herede de la vista original, que sería lo más normal, entonces la nueva plantilla debería lucir algo como:

    @{
        Layout = "~/Views/Shared/_Layout.cshtml"; //Esta sería la plantilla original del sitio web.
    }
    
    <h1>New Layout</h1> <!-- Esto sería "lo nuevo" de esta plantilla. -->
    @RenderBody()


    Jose R. MCP
    Code Samples

    miércoles, 10 de diciembre de 2014 16:03
  • >>La pública, es el típico login, como también pantallas para recuperar usuario y/o contraseña como también registrarse en el sistema

    podrias hacer uso del tag <location> en el web.config para definir la parte publica

    Indicar elementos públicos o privados en un mismo sitio de ASP.NET

    >>Mi idea es que la sección pública tenga el típico esquema html5 con las referencias a los css y scripts, pero "sin navbar, osea, sin menu" y la sección privada igual pero con navbar.

    tienes que definir dos layout distintos, uno con el navvar que aplicas a todas las paginas

    y otro sin este que aplicas a la pagina de login

    por supuesto tambine podrias hacer que un layout implemente desde otro, esto es lo mismo que una view, en el segundo layout defines el RenderSection() donde pondrias el navvar, o podrias definir alguna section

    sino quieres complicartre defines dos independientes y listo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 10 de diciembre de 2014 16:03
  • Perfecto funciona, yo simplemente copie el viewstart(poniendo el otro layout) y el otro layout en la misma carpeta que quiero que se muestre

    sábado, 3 de octubre de 2020 15:29