我有一个WebForms应用程序,其中第一个页面基本上是一个网格,其中包含指向加载PDF查看器的第二个页面的链接。网格实际上位于.ascx控件中。从第一页到PDF查看器页面,一切正常。但是,当我按下后退按钮返回第一页时。我收到以下错误(在Chrome中,但这也发生在其他浏览器中):
如果单击后退按钮,浏览器将返回第一页,一切正常,但我需要解决此错误。
我已尝试根据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方法中)的代码中,但都无济于事。我在这里缺少什么?
答案 0 :(得分:3)
正如@JJS所暗示的那样,听起来你正在使用OnClick(可能通过LinkButton或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");