Asp.net mvc 在ASP.NET MVC中,每页运行一次控制器代码

Asp.net mvc 在ASP.NET MVC中,每页运行一次控制器代码,asp.net-mvc,Asp.net Mvc,我在基本控制器中设置了一个属性,这样我就可以从每个操作中访问它的值。最初我将代码放在OnActionExecuting方法中(从cookie中)获取值,该方法很有效,但后来我意识到它将在每次操作调用中被调用(由于重复部分视图,某些页面可能会运行数百次)。我怎样才能做到每页只调用一次 我看了一个类似的回答问题。。。但是答案只涉及Ajax请求,这不是我的问题。类似于@philsandler提到的,您可以使用相同的解决方案。但我仍然会使用一个动作过滤器,使其可重用和包含。像下面这样 public cl

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


我看了一个类似的回答问题。。。但是答案只涉及Ajax请求,这不是我的问题。

类似于@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)
为例显示在“父”视图上。我认为我的问题没有多大意义,因为我现在再次阅读它。我想我可以用一个动作过滤器做我想做的事情,所以把这个标记为答案。这有关系吗?“一页一次”是什么意思?您确实意识到,每次发出GET或POST请求时,[通常]都会创建一个新的控制器实例,不是吗?您可以使用
静态
属性,但该属性将在每个应用程序域中调用一次。若要在每个用户会话中设置一次,请考虑使用会话状态变量。