¿Cómo puedo especificar diferentes diseños en el ASP.NET MVC 3 razor ViewStart archivo?
Me gustaría tener 2 Diseños separados en mi aplicación. Digamos que uno es para la sección Pública del sitio web y el otro es para el lado de los Miembros.
Para simplificar, digamos que toda la lógica para cada uno de estos sitios está envuelta cuidadosamente en 2 controladores distintos.
- PublicController
- StaffController
Y que cada uno tiene un Diseño correspondiente para toda la vista bajo cada.
- _PublicLayout.cshtml
- _estafflayout.cshtml
Cómo uso el _ViewStart.archivo cshtml ¿para especificar que todas las Acciones de la vista en" Public "usen el PublicLayout y todo en" Staff " usen el StaffLayout?
Gracias!
3 answers
Podría poner un archivo _ViewStart.cshtml
dentro de la carpeta /Views/Public
que anularía el predeterminado en la carpeta /Views
y especificaría el diseño deseado:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Por analogía, podría poner otro archivo _ViewStart.cshtml
dentro de la carpeta /Views/Staff
con:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
También puede especificar qué diseño debe usarse al devolver una vista dentro de una acción del controlador, pero eso es por acción:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Otra posibilidad es un filtro de acción personalizado que anularía el diseño. Como puedas vea muchas posibilidades para lograr esto. Depende de usted elegir cuál se adapta mejor a su escenario.
ACTUALIZACIÓN:
Como se solicitó en la sección de comentarios, aquí hay un ejemplo de un filtro de acción que elegiría una página maestra:
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
Y luego decora un controlador o una acción con este atributo personalizado especificando el diseño que deseas:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-01 23:05:54
Un método más es definir el Layout dentro de la vista:
@{
Layout = "~/Views/Shared/_MyAdminLayout.cshtml";
}
Se pueden encontrar más formas de hacerlo aquí, espero que esto ayude a alguien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-08 11:09:44
Este método es la forma más sencilla para que los principiantes controlen la representación de diseños en su ASP.NET Aplicación MVC. Podemos identificar el controlador y renderizar los Layouts como controlador par, para ello podemos escribir nuestro código en el archivo _ViewStart en el directorio raíz de la carpeta Views. A continuación se muestra un ejemplo de cómo se puede hacer.
@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
string cLayout = "";
if (controller == "Webmaster") {
cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
else {
cLayout = "~/Views/Shared/_Layout.cshtml";
}
Layout = cLayout;
}
Lea el artículo completo aquí "Cómo renderizar diferentes Diseños en ASP.NET MVC"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-08 04:29:18