【问题标题】:Is it possible to call a method when any action is called in a whole controller?在整个控制器中调用任何操作时是否可以调用方法?
【发布时间】:2014-03-02 19:10:41
【问题描述】:

我想在调用任何操作来执行某些工作时调用特定方法。我想知道这是否可能?我确实有一个用于所有控制器的基本控制器,但目前那里什么都没有。

即 如果我转到索引页面,则会在调用该方法时向控制器调用索引操作方法,我想做一些工作然后继续操作。我试图避免在每一个动作中到处调用这个方法,看看是否有一种通用的方法可以在任何地方调用它。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    是的,确实有这样的东西。您正在寻找filters,更具体地说是OnActionExecuting

    如果此方法在派生的 Controller 类中被覆盖,则该类中的每个操作方法都会调用该方法。为了更灵活,从 ActionFilterAttribute 派生一个类,并在派生的 ActionFilterAttribute 类中重写此方法。

    示例:

    protected override void OnActionExecuting(ActionExecutingContext ctx) {
        base.OnActionExecuting(ctx);
        ctx.HttpContext.Trace.Write("Log: OnActionExecuting",
             "Calling " +
             ctx.ActionDescriptor.ActionName);
    }
    

    【讨论】:

    • 可以在里面给viewbag设置一些东西吗?
    • 是的。它只是一个普通方法,在调用控制器中的任何操作方法之前将被调用。
    • 请注意,您有 4 个地方可以覆盖,post pre action execution 和 post pre ActionResult execution。如果您想操作操作的前置条件,请在 OnActionExecuting 中执行,对于后操作执行也是如此。其他两个重载是您可以操纵响应的地方。不需要调用base,它永远是空的。
    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 2012-04-22
    • 1970-01-01
    • 2019-06-17
    • 2012-07-21
    • 1970-01-01
    • 2017-09-06
    • 2013-10-05
    相关资源
    最近更新 更多