Asp.net Mvc:在每个控制器/动作上调用逻辑

时间:2009-08-29 13:45:39

标签: asp.net-mvc

每次动作返回视图时,我都会想要执行一些逻辑。逻辑需要知道动作的名称和控制器。目前我正在使用每个控制器/操作的过滤器,但有时我希望所有返回视图的操作都使用此逻辑。因此,在任何地方添加过滤器似乎都是我可以避免的额外工作。

2 个答案:

答案 0 :(得分:2)

您可以覆盖OnActionExecutingOnActionExecuted方法,为控制器中的所有操作提供常见行为。如果您希望它应用于多个控制器,您可以使用此覆盖创建一个基本控制器类,并使那些需要此行为的控制器派生自基本控制器。

public override void OnActionExecuting( ActionExecutingContext filterContext )
{
     ... common code here ...
}

public override void OnActionExecuted( ActionExecutedContext filterContext )
{
    if (filterContext.Result is ViewResult)
    {
        ... common code here ...
    }
}

答案 1 :(得分:1)

要了解过滤器中的操作和控制器名称:

String ActionName = filterContext.ActionMethod.Name;
String ControllerName = filterContext.Controller.ToString();

要将过滤器应用于所有操作,请在基本Controller类上定义OnActionExecuting,然后将其子类化。

我已经询问了一个特定的question如何仅过滤返回视图的操作...