2011-03-26 7 views
8

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

14

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() { 
      .... 
     } 
} 
+0

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). –

3

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

+0

Esto no funciona –

Cuestiones relacionadas