2010-05-21 153 views
1

我有一个web应用程序通过ajax获取大量内容。例如,当用户编辑一些数据时,浏览器将使用ajax post发送更改,然后执行ajax获取新内容并用该内容替换页面上的现有div。这只是找到MVC1,但在MVC2我会得到不一致的结果。ASP.NET MVC2和浏览器缓存

我发现默认情况下,MVC1在设置为当前时间的响应头中包含Expires项,但在MVC2中,Expires头缺失。这是一些浏览器(IE8)实际使用ajax的缓存版本而不是新版本的问题。

为了处理这个问题,我创建了一个简单的ActionFilterAttribute,它将响应缓存设置为NoCache(见下文),它可以工作,但似乎有点用各种控制器来装饰这个属性。是否有一种全球性的方式来为每个控制器设置?

这是MVC2中的错误,它确实应该在每个ActionResult/view/page上设置过期?大多数MVC程序不处理数据输入,其中陈旧的数据是非常糟糕的事情?

感谢


public class ResponseNoCachingAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     base.OnResultExecuted(filterContext); 

     filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 
    } 
} 

回答

4

你有没有尝试添加以下属性到控制器?

[OutputCache(Location = OutputCacheLocation.None)] 
+0

是的,这将工作。我之前没有注意到这个属性。它仍然有点愚蠢,你必须把这个属性放在每个控制器上,而不是在某个地方设置全局设置。谢谢。 – Dan 2010-05-23 12:26:34

+4

您可以使用该属性声明具有适当名称的抽象基类控制器,并让所有控制器都继承该属性。 – 2010-05-24 08:02:50