Estoy luchando con lo que parece ser un concepto muy simple. Si tengo un valor en ViewBag destinado a mi _Layout.cshtml, ¿cómo y dónde puedo establecer ese valor?Enfoques para el manejo de datos comunes en ASP.NET MVC 3 vistas
Éstos son los más evidentes (para mí) opciones como actualmente los veo:
- Establecer el valor de cada controlador (no DRY)
- crear mi propia base de control que hereda de Controller y establezca el valor de la clase
- de base Establecer el valor en Global.asax.cs (siente sucio)
- Crear ActionFilter para establecer los datos y registrar el filtro a nivel mundial (también se siente mal)
- establecer el valor en _ViewStart.cshtml (se siente muy mal y muy sucio)
Por ejemplo:
_Layout.cshtml
<!DOCTYPE html>
<html>
<head runat="server">
<title>@ViewBag.Title</title>
</head>
<body>
<div id="header">
<h1>Welcome @ViewBag.UserName</h2>
</div>
<div id="content">
@RenderBody()
</div>
</body>
</html>
Si cada controlador establece el valor Nombre de usuario, que no es terriblemente SECO. Si estuviera abordando esto con algo como CodeIgniter, solo crearía mi propio controlador base para manejar estos elementos comunes y seguir mi camino feliz. ¿Hay una opción más preferida con ASP.NET MVC 3?
Bueno, en realidad, en este caso particular, estoy adivinando "Nombre de usuario" en realidad vendría de la sesión/formularios de entrada de autenticación. Así que es posible que desee utilizar un ayudante de HTML que utiliza el código de FormsAuth para extraer el nombre de usuario de la cookie y procesar un MvcHtmlString, solo un pensamiento ... – RPM1984
Hmmm ... buen punto. Tal vez @ ViewBag.UserName no es el mejor ejemplo. Sin embargo, estoy realmente más preocupado por el panorama general en este momento. – Greg
@ RPM1984: no debería importar a la vista que el "Nombre de usuario" proviene de la autenticación de formulario. Se debe pasar en (ViewBag o de otro modo). La vista nunca debe "buscar" nada. Considere probar escenarios también, quiere pasar datos falsos a la vista para probar la unidad. No es posible si su vista está "buscando" cosas. También invalida el punto general del patrón MVC. No te estoy molestando, pero acabo de ver este tipo de mentalidad repetida en varios artículos de MVC (¡incluida la plantilla de proyecto MVC predeterminada!) – Roger