tutorial net mvc español asp c# asp.net .net asp.net-mvc asp.net-mvc-3

español - mvc asp.net c#



Cambiar el diseño(página maestra) de la vista en ASP.NET MVC sin volver a crearlo (4)

Estoy usando ASP.NET MVC 3 con vistas Razor. Cuando desee crear una vista, puede elegir un diseño (página maestra) para su vista, o dejarla para elegir Predeterminado (_Layout).

Me resulta interesante cambiar este diseño después de crear una vista sin volver a crearla, ¿hay algún lugar donde almacenar la información de diseño sobre las vistas? y ¿cómo puedo cambiarlo?


Después de crear su vista en la parte superior del archivo cshtml, puede ver su diseño incluido.

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

Simplemente puede reemplazar eso, por ejemplo, con un diseño diferente

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

Además, puede almacenar esto en el diseño base ( _ViewStart.cshtml ) y todas sus vistas usarán ese diseño.


Existen varias formas de especificar un diseño diferente para una vista, según sus necesidades:

En la vista

Como se menciona en otras respuestas, simplemente cambie la propiedad Layout la vista:

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

En _ViewStart.cshtml

MVC 3 agregó un Views/_ViewStart.cshtml predeterminado en el que puede poner la lógica que comparten todas las vistas. También puede crear archivos _ViewStart.cshtml adicionales en cualquier subdirectorio de Vistas para una lógica personalizada adicional (buscará en la jerarquía y en Carpetas Shared , al igual que al buscar cualquier otra vista o parcial).

Poner mucha lógica comercial en esto se siente como una violación del principio de "separación de preocupaciones", pero al mismo tiempo puede ser muy útil.

Tenga en cuenta que _ViewStart.cshtml hereda de StartPage , no de WebPage , por lo que sus propiedades pueden ser ligeramente diferentes de las que está acostumbrado (por ejemplo, tiene que ir a ViewContext para obtener ViewBag ).

@{ if (ViewContext.ViewBag.IsAdmin) // or other custom logic { Layout = "~/Views/Shared/_AdminLayout.cshtml"; } else { Layout = "~/Views/Shared/_Layout.cshtml"; } }

En la acción del controlador

El método View() tiene una sobrecarga que toma una página de diseño explícita (Intellisense se refiere a ella como una "página maestra"):

public ActionResult FooAction() { var model = new MyModel(); return View("Index", "_CustomLayout", model); }


Podemos cambiar la representación predeterminada de los diseños con el archivo _ViewStart utilizando el siguiente código:

@{ var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString(); string layout = ""; if (controller == "Admin") { layout = "~/Views/Shared/_AdminLayout.cshtml"; } else { layout = "~/Views/Shared/_Layout.cshtml"; } Layout = layout; }


En MVC3 tiene _ViewStart.cshtml que almacena el diseño de todas las páginas; puede cambiar este elemento para cambiar el diseño de todas las páginas o puede agregar un nuevo elemento de diseño en la parte superior de las páginas de la vista del objetivo en el bloque @{} como el siguiente para cambiar el diseño de la página específica:

@{ Layout = "~/Views/Shared/_newLayout.cshtml"; ViewBag.Title = "Index"; }