2010-04-29 240 views
9

我有一个ASP.net应用程序(C#)。Chrome后退按钮页面刷新 - ASP.net

当用户在特定页面上,需要点击该页面可将他们带到一个孩子页面上的链接,显示产品的详细信息。

如果用户点击浏览器的后退按钮,我需要的父页面被刷新到其初始状态。即所有的数据类型的文本框需要空白,任何隐藏的领域重置等基本上我需要一个CTRL-F5时,用户点击回来。

禁用后退按钮不是一个选项。

我只在某些页面上需要它。

在IE和Firefox我能得到这个工作没有问题。但是对于chrome,文本框仍然包含它们的值,就像隐藏字段一样。如果我在Chrome中点击CTRL-F5,该页面将被正确重置为初始状态。

这是我试过的代码。

<%@ OutputCache Location="None" VaryByParam="None" %> 

这:

Response.Buffer = true; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetAllowResponseInBrowserHistory(false); 
    Response.Cache.SetNoStore(); 

这:

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
    Response.Cache.SetValidUntilExpires(false); 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 

我也尝试了各种各样的这些不同的组合,但没有成功。

感谢

+0

您使用过哪些Chrome浏览器?开发?测试版?稳定?视窗? – bzlm 2010-09-24 12:26:56

回答

0

的“蛮力”的解决方案将是把一些JavaScript在该网页上加载的数据集,以一些已知的状态在页面上。所以它找到了所有的元素,并基于一组数据或json对象来设置数据。在初始请求中,由于无论如何都默认情况下,该设置没有什么区别。在后退按钮请求上,由于javascript仍然需要运行,因此无论浏览器如何,它都会重置所有值。

我不相信你可以强制浏览器在你的描述虽然方式运作,因为它取决于他们想如何实现一个后退按钮每个浏览器 - 铬只是它不同。

6

当按下浏览器的后退按钮,输入字段都不会自动被浏览器复位。相反,浏览器保留用户的输入,使用户更容易返回并更改输入。

你解决不了这个服务器端,因为浏览器绕过缓存此。相反,您可以在输入字段上使用autocomplete="off" HTML属性,以防止它们被浏览器保留。

使用JavaScript,您也可以手动复位形式:

document.getElementById("form1").reset(); 
+1

谢谢。这并不能解释为什么IE浏览器和Firefox看起来很爽,但不是Chrome浏览器。 – SetiSeeker 2010-04-29 13:01:27

+0

我猜这是Google人们的设计选择。我仍然很高兴他们支持'autocomplete'属性作为解决方法。 – Prutswonder 2010-04-29 13:08:16

+0

这是Chrome开发者讨厌的“功能”。我花了很多时间来弄清楚我的动态表单发生了什么(用户可以添加新的行,在提交时将其保存到数据库中)。在“返回”时,Chrome不会填写之前添加的行的db id(即使我的应用程序将它输出为HTML),所以我的应用程序认为所有这些行都是新的,并在进一步的提交中将它们复制。 'autocomplete =“off”'不过是这样。 – theyetiman 2015-07-03 15:13:03

2

这两条线解决了Chrome的问题对我来说:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

而且我用这个可选行告诉浏览器不要为同一页面的每个请求创建一个历史记录:

Response.Cache.SetAllowResponseInBrowserHistory(true); 

个来源:

Most popular answer in this post

Optional line

0

你也可以把自动完成的表单标签,而不是每个输入字段= “关闭”。