导航回ASPX页面时{ERR_CACHE_MISS

时间:2015-05-14 22:40:36

标签: c# asp.net caching

我有一个WebForms应用程序,其中第一个页面基本上是一个网格,其中包含指向加载PDF查看器的第二个页面的链接。网格实际上位于.ascx控件中。从第一页到PDF查看器页面,一切正常。但是,当我按下后退按钮返回第一页时。我收到以下错误(在Chrome中,但这也发生在其他浏览器中):

Cache miss error

如果单击后退按钮,浏览器将返回第一页,一切正常,但我需要解决此错误。

我已尝试根据this StackOverflow answer的建议在第一页停用缓存,如下所示:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

我也试过这个:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);

我已将此代码放在.aspx页面和.ascx控件(在OnInit方法中)的代码中,但都无济于事。我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

正如@JJS所暗示的那样,听起来你正在使用OnClick(可能通过LinkBut​​ton或ImageButton)导致部分/完全回发,并且您的重定向发生在代码隐藏中。如果这是正确的,您有没有使用HyperLinks的原因?

缓存处理不是修复。浏览器正在说明页面之间发生的帖子。

答案 1 :(得分:0)

覆盖OnPreInit方法并在Response对象上设置各种与缓存相关的属性,以防止浏览器缓存页面。

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    Response.Buffer = true;
    Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
    Response.Expires = -1500;
    Response.CacheControl = "no-cache";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
}

您可以执行类似禁用浏览器页面缓存的操作,如下所示:

   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.Cache.SetExpires(Now.AddSeconds(-1));
   Response.Cache.SetNoStore();
   Response.AppendHeader("Pragma", "no-cache");