11

有没有可能找到类似的功能Page_Load?我有 MVC 应用程序,我需要在每个页面加载或重新加载时运行一些代码,或者我调用一些控制器。所有类的一个共享功能?

我尝试 Application_Start,但这仅在第一次运行应用程序时执行。我搜索了一些类似BeginRequest的,但是这个函数已经被调用了好几次,我只需要第一次,当我加载页面并且我需要结束函数,比如整个项目的构造函数和析构函数。

这是示例代码。

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }  
}

document.ready不是我的情况。并且调用每个控制器的函数是最后的选择。代码必须在调用任何其他函数之前执行。在一切结束之前,我需要运行结束功能。例如,起初我需要为所有类创建共享的 mysql 连接器。最后我需要关闭 mysql 连接。

4

2 回答 2

17

让您的所有控制器都继承自自定义 BaseController:

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
        // your code here
    }
}

public class HomeController : BaseController // instead of Controller
{
    // ...
}
于 2013-10-09T09:15:29.390 回答
5

Jan的答案的更新。抽象方法是公开的,onExecutingAction现在不受保护。

public virtual void OnActionExecuting(ActionExecutingContext context);

因此,您不能protected在覆盖时使用访问修饰符。改为公开。

public class BaseController : Controller
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
    }
}
于 2020-08-09T18:53:47.457 回答