开发者

How can I make a function to run on all of the controllers in ASP.NET MVC 2?

I have a function that :

  • gets some information from model ( done )
  • gets some information from cookie ( done ), and
  • set the new informations on ViewData ( on views ) on every controller

Also, the function need to run on every controller when the controller is开发者_运维百科 calling (I don`t know how to do this).

I have write this function on a BaseController but I get an error:

Object reference not set to an instance of an object.

And, I think this is not the right way. I'm using ASP.NET MVC 2 and .NET 3.5.

Thx for your help.


Create a custom action filter:

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;
        }
    }
}

Slap that bad boy on your base controller:

[MyActionFilter]
public class BaseController : Controller
{

}

Now, after every ActionResult for every Controller is executed, your action filter logic will be executed.

You've got a few other events you can hook into, but it sounds like you want to do some stuff after the action has been executed, so i think the above should suit you fine.


It won't help you until you upgrade but in ASP.NET MVC 3 you can use a global action filter for this purpose.

http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜