我有一个通过ajax获取大量内容的Web应用程序。例如,当用户编辑某些数据时,浏览器将使用ajax帖子发送更改,然后执行ajax获取新内容并使用该内容替换页面上的现有div。这只是用MVC1找到的,但在MVC2中我会得到不一致的结果。
我发现MVC1默认包含设置为当前时间的响应头中的Expires项,但在MVC2中缺少Expires头。这是一些浏览器(IE8)实际使用ajax get的缓存版本而不是新版本的问题。
为了解决这个问题,我创建了一个简单的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);
}
}
答案 0 :(得分:4)
您是否尝试将以下属性添加到控制器?
[OutputCache(Location = OutputCacheLocation.None)]