如何在ASP.NET MVC 2中的所有控制器上运行函数?

0 asp.net-mvc controller

我有一个功能:

  • 从模型中获取一些信息(完成)
  • 从cookie中获取一些信息(完成),以及
  • 在每个控制器上设置ViewData(在视图上)的新信息

此外,当控制器调用时,该功能需要在每个控制器上运行(我不知道如何执行此操作).

我在BaseController上编写了这个函数,但是我收到一个错误:

你调用的对象是空的.

而且,我认为这不是正确的方法.我正在使用ASP.NET MVC 2和.NET 3.5.

谢谢你的帮助.

RPM*_*984 8

创建自定义操作过滤器:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // if the ActionResult is not a ViewResult (e.g JsonResult, ContentResult),
        // there is no ViewData so don't do anything.
        var viewResult = filterContext.Result as ViewResult;

        if (viewResult != null)
        {
           // call your function, do whatever you want to the result, e.g:
           viewResult.ViewData["someKey"] = someData;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的基础控制器上拍下那个坏男孩:

[MyActionFilter]
public class BaseController : Controller
{

}
Run Code Online (Sandbox Code Playgroud)

现在,在执行每个Controller的每个ActionResult之后,将执行您的动作过滤器逻辑.

你还有其他一些可以挂钩的事件,但听起来你想要在动作执行做一些事情,所以我觉得上面应该适合你.