处理用户返回到在asp.net应用程序中缓存项目的页面的最佳方法是什么? 有没有一种很好的方法来捕获后退按钮(事件?)并以这种方式处理缓存?

===============>>#1 票数:7 已采纳

您可以尝试使用HttpResponse.Cache属性,如果这将有所帮助:

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";

编辑:或者你真的可以疯了,手工完成:

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 

===============>>#2 票数:6

据我所知(或至少已阅读),最好不要回应用户事件,而是想“在页面中”..

构建你的应用程序,因此它不关心是否按下后退按钮..它只会处理它。从开发的角度来看,这可能意味着一些额外的工作,但整体上将使应用程序更加健壮。 。

即如果步骤3执行一些数据chages,然后用户单击返回(到步骤2)并再次单击下一步,然后应用程序检查是否已进行更改..或者理想情况下,它不会进行任何更改,直到用户最后单击“确定”。这样,所有更改都会被存储,您可以根据以前输入的值在每次加载时重新填充表单。

我希望这是有道理的 :)

===============>>#3 票数:2

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

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

在HTTP S浏览器中解释Cache-control: must-revalidate当使用Back按钮时, Cache-control: must-revalidate为刷新页面的请求(Mozilla称之为“愚蠢的银行模式”)。 普通HTTP不支持此功能。

===============>>#4 票数:0

处理它的最好方法是在ASP.NET页面中放置一个no-cache指令(如果你使用的话,可以放入一个母版页)。 我认为没有办法直接在ASP.NET代码中处理这个问题(因为缓存决策是在客户端上发生的)。

至于MVC,不知道如何实现这一点(假设它与基于Web Forms的ASP.NET不同); 我没用过它。

===============>>#5 票数: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();

您可以将它放在MasterPage的Page_Load()事件处理程序中,这样当按下后退按钮时,应用程序中的每个页面都需要往返服务器。

  ask by TheEmirOfGroofunkistan translate from so

未解决问题?本站智能推荐: