Tengo un controlador con varias acciones que devuelven un conjunto de datos que es el mismo entre todos. En lugar de agregar los datos al ViewBag en cada acción, ¿hay algún patrón o atributo o algo que pueda llamar o configurar para agregar los mismos datos a viewdata o viewbag para cada acción, o alguna otra forma mejor de realizar el get the mismos datos en cada vista sin llamar al método en cada acción?¿Hay alguna manera de devolver los mismos datos para cada acción ASP.Net MVC en un controlador en particular?
Respuesta
Lo que estás buscando es ActionFilter
, y luego reemplaza OnActionExecuting
. He aquí una de mis ActionFilters que anexa que inició la sesión actual en el usuario a la ViewBag:
public class AppendUserActionFilterAttribute : ActionFilterAttribute
{
...
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
User currentUser = _sessionManager.CurrentUser;
dynamic viewBag = filterContext.Controller.ViewBag;
viewBag.CurrentUser = currentUser;
}
...
}
Luego hay que aplicar el atributo donde desea que esto ocurra. Si lo agrega a una acción, esa acción obtendrá la entrada agregada en ViewBag. Si lo agrega a un controlador, todas sus acciones lo obtendrán. Si lo añadirá a un controlador de base y tener todos los controladores de una subclase, entonces todas sus acciones en toda su aplicación consiguen
[AppendUserActionFilter]
public class MyController : Controller {
public ActionResult Foo() {
....
}
}
Una solución viable, se puede asignar a través del constructor de su controlador
public class HomeController : Controller
{
public HomeController()
{
ViewData["Common"] = "Some Data";
}
}
Estará disponible para todas las acciones en HomeController
Esto no funciona –
- 1. Puede aplicar un ActionFilter en ASP.NET-MVC en CADA acción
- 2. ruta ASP.NET MVC devolver 404 sin acción
- 3. ASP.NET MVC: ¿hay alguna manera de simular un ViewState?
- 4. devolver un archivo js del controlador de asp.net mvc
- 5. Devolver documento PDF de Asp.net controlador MVC
- 6. ASP.NET MVC enviando datos JSON a una acción de controlador
- 7. ¿Hay alguna manera de desencadenar un stacktrace cada vez que se utiliza un registrador en particular?
- 8. ASP.NET MVC: ¿Se creó el controlador para cada solicitud?
- 9. Determinando qué controlador y qué acción están manejando una URL particular en ASP.NET MVC
- 10. Cómo devolver el error de la acción MVC de ASP.NET
- 11. ¿Hay alguna manera de enviar parámetros opcionales a una acción?
- 12. ASP.NET MVC: ¿Es una mala idea devolver diferentes vistas desde una sola acción del controlador?
- 13. ASP.NET MVC golpea la memoria de salida para cada acción
- 14. ¿Cómo puedo obtener cierto código para ejecutar antes de cada acción de controlador único en ASP.NET MVC 2?
- 15. ¿Cómo lograr un controlador dinámico y un método de acción en ASP.NET MVC?
- 16. Configurar una ruta {arrendatario}/{controlador}/{acción}/{id} con ASP.NET MVC?
- 17. ¿Devuelve XML de la acción de un controlador en ActionResult?
- 18. ¿Cómo debo devolver una imagen de una acción del controlador C# asp.net-mvc-2?
- 19. ¿Hay alguna manera de anular un archivo de estilo bibtex para una entrada en particular?
- 20. backgroundworker bloqueando la acción del controlador MVC
- 21. Devolver JSON desde un método JsonResult en el controlador MVC
- 22. Devolver 307 redireccionamiento temporal en ASP.NET MVC
- 23. ¿Hay alguna forma de manejar datos de formularios en un controlador Web Api?
- 24. ¿Hay alguna manera de lograr el enlace de datos múltiples para un solo elemento en KnockoutJS?
- 25. ASP.NET MVC: devolver grandes cantidades de datos de FileResult
- 26. En .NET MVC, ¿hay alguna manera fácil de verificar si estoy en la página de inicio?
- 27. ASP.NET MVC: ¿filtro de acción para configurar las variables del controlador?
- 28. MVC Authentication bypass para un único controlador/acción
- 29. Obteniendo el nombre del controlador y el método de acción en la vista en ASP.Net MVC
- 30. ¿Hay alguna manera para que un div en particular ignore su posicionamiento de div principal?
ActionFilterAttribute existe en dos espacios de nombres: System.Web.Mvc y System.Web.Http.Filters. ¿Hay alguna diferencia? ¿Cuál debería ser usado? Creo que esto ayudará a evitar confusiones para los novatos (como yo). –