我有一个功能:
此外,当控制器正在调用时,该功能需要在每个控制器上运行(我不知道如何执行此操作)。
我在BaseController上编写了这个函数,但是出现了错误:
对象引用未设置为对象的实例。
而且,我认为这不是正确的方法。我正在使用ASP.NET MVC 2和.NET 3.5。
感谢您的帮助。
答案 0 :(得分: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;
}
}
}
把那个坏孩子扯到你的基地控制器上:
[MyActionFilter]
public class BaseController : Controller
{
}
现在,在执行每个Controller的每个ActionResult之后,将执行您的动作过滤器逻辑。
你还可以参加其他一些活动,但听起来你想要在动作完成之后做一些,所以我认为上面的内容应该适合你。
答案 1 :(得分:0)
在升级之前它不会帮助您,但在ASP.NET MVC 3中,您可以使用全局操作过滤器来实现此目的。
http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx