2008-08-22 125 views

回答

6

您可以尝试使用HttpResponse.Cache property是否会有所帮助:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["Category"] = true; 

if (Response.Cache.VaryByParams["Category"]) 
{ 
    //... 
} 

或者可能会与HttpResponse.CacheControl完全封锁网页的缓存,但有利于Cache属性之上的它的被弃用:

Response.CacheControl = "No-Cache"; 

编辑:或者你可以真正go nuts和做这一切的手:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
0

对付它的最好的办法是可能提出你的ASP.NET页面no-cache指令(或母版页,如果你正在使用一个)。我不认为有一种方法可以直接在ASP.NET代码中处理这个问题(因为缓存决策发生在客户端上)。对于MVC,不知道你会如何实现这一点(假设它不同于基于Web窗体的ASP.NET);而对于MVC,不知道如何实现它(假设它不同于基于Web窗体的ASP.NET);对于MVC,不知道如何实现它(假设它不同于基于Web窗体的ASP.NET)。我没有用过它。

6

据我知道(或者至少已经阅读)是其最好尽量不响应用户事件工作,而是认为“页面” ..

架构师应用程序,以便它不“不在乎如果后退按钮被按下。它只会处理它。这可能意味着从发展的眼光来看一些额外的工作,但总体将使应用程序有很多更强大的..

即如果第3步执行一些数据chages,然后用户点击回到(第2步),然后再次点击下一步,然后应用程序检查是否已做出更改。或者理想情况下,它没有任何更改直到用户点击“确定”结束..这样,所有的变化都存储,你可以重新填写表格,基于之前输入的值在加载时,每次...

我希望这是有道理的: )

+0

-1更多的是比实用的理想答案。一些应用程序从一开始就被设计成一种特殊的方式,当在一个预算紧张的大型团队中工作时,将资源沉浸到改变架构中并不会给业务利益相关者带来任何明显的收益。此外,这不是真的回答这个问题。 – 2015-02-11 23:07:51

2

RFC 2616 §13.13历史记录和缓存是不同的东西。应该绝对没有办法让缓存影响后退按钮。

如果HTTP标头的任何组合影响后退按钮,这是浏览器中的一个错误......只有一个例外。

在HTTP中S浏览器将Cache-control: must-revalidate解释为使用“后退”按钮时刷新页面的请求(Mozilla称之为“傻银行模式”)。这在纯HTTP中不受支持。

0

下面的代码在IE9 +,FF21和最新的Chrome为我工作:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private); 
Response.Cache.AppendCacheExtension("must-revalidate"); 
Response.Cache.AppendCacheExtension("max-age=0"); 
Response.Cache.SetNoStore(); 

您可以在母版Page_Load()事件处理程序,以便在您的应用程序的每个页面需要往返的地方这服务器时按下后退按钮。