【问题标题】:Run controller code once per page in ASP.NET MVC在 ASP.NET MVC 中每页运行一次控制器代码
【发布时间】:2013-10-28 19:37:30
【问题描述】:

我在基本控制器中设置了一个属性,以便我可以从每个操作中访问它的值。最初我在OnActionExecuting 方法中放入代码以获取值(来自cookie),该方法有效,但后来我意识到它会在每次操作调用时被调用(由于重复部分视图,某些页面可能会运行数百次)。我怎么能这样做,所以每页只调用一次?

我查看了一个类似的已回答问题...How to call a function *only once* in ASP.NET MVC page cycle 但答案仅涉及 Ajax 请求,这不是我的问题。

【问题讨论】:

  • “每页一次”是什么意思?您确实意识到每次发出 GET 或 POST 请求时[通常]都会创建一个新的控制器实例,不是吗?您可以使用 static 属性,但每个应用程序域都会调用一次。要为每个用户会话设置一次,请考虑使用会话状态变量。

标签: asp.net-mvc


【解决方案1】:

类似于@philsandler 提到您可以使用相同的解决方案。但我仍然会使用动作过滤器来使其可重用和包含。如下所示。

public class RunOnlyPerAction : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        {
            //read cookie
        }
    }
}


 [RunOnlyPerAction]
 public ActionResult Index()
 {
     return View();
 }

【讨论】:

  • 但这不是 ajax 请求,我的页面包含部分视图,并且它们显示在“父”视图中,例如 @html.action(xxx)
  • 我认为我的问题没有多大意义,因为我再次阅读它。我想我可以用一个动作过滤器做我想做的事,所以把它标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多