我有一个功能:
此外,当控制器调用时,该功能需要在每个控制器上运行(我不知道如何执行此操作).
我在BaseController上编写了这个函数,但是我收到一个错误:
你调用的对象是空的.
而且,我认为这不是正确的方法.我正在使用ASP.NET MVC 2和.NET 3.5.
谢谢你的帮助.
创建自定义操作过滤器:
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之后,将执行您的动作过滤器逻辑.
你还有其他一些可以挂钩的事件,但听起来你想要在动作执行后做一些事情,所以我觉得上面应该适合你.