有没有办法为特定控制器中的每个ASP.Net MVC操作返回相同的数据?

8 asp.net-mvc

我有一个控制器,有几个动作都返回一组数据,这些数据都是相同的.不是在每个动作中将数据添加到ViewBag,而是我可以调用或设置一些模式或属性,以便为每个动作添加相同的数据到viewdata或viewbag,或者执行获取的其他更好的方法每个视图中相同的数据,而不是在每个动作中调用方法?

Mat*_*eer 13

你要找的是一个ActionFilter,然后覆盖OnActionExecuting.这是我的一个ActionFilters,它将当前登录的用户附加到ViewBag:

public class AppendUserActionFilterAttribute : ActionFilterAttribute
{
    ...
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        User currentUser = _sessionManager.CurrentUser;

        dynamic viewBag = filterContext.Controller.ViewBag;
        viewBag.CurrentUser = currentUser;
    }
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要将属性应用于您希望发生的任何位置.如果将其附加到操作,该操作将在ViewBag中获取添加的条目.如果将其附加到控制器,它的所有操作都将获得它.如果将它附加到基本控制器并让所有控制器将其子类化,那么整个应用程序中的所有操作都会获得它

 [AppendUserActionFilter]
 public class MyController : Controller {

      public ActionResult Foo() {
           ....
      }
 }
Run Code Online (Sandbox Code Playgroud)