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";
}