9

我有一个 ASP.net 应用程序 (c#)。

当用户在特定页面上时,他们单击此页面上的链接,将他们带到子页面,显示产品详细信息。

如果用户单击浏览器后退按钮,我需要将父页面刷新到其初始状态。即所有输入数据的文本框都需要为空白,任何隐藏字段都需要重置等。基本上,当用户单击返回时,我需要一个 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();

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

谢谢

4

4 回答 4

6

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

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

您还可以使用 JavaScript 手动重置表单:

document.getElementById("form1").reset();
于 2010-04-29T12:57:59.243 回答
2

这两行代码为我解决了 Chrome 问题:

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

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

Response.Cache.SetAllowResponseInBrowserHistory(true);

资料来源:

这篇文章中最受欢迎的答案

可选线路

于 2012-03-06T19:16:33.727 回答
0

“蛮力”解决方案是在页面上放置一些 javascript,在页面加载时将数据设置为某个已知状态。因此它会根据数据数组或 json 对象查找所有元素并设置数据。在最初的请求中,由于一切都是默认的,因此设置没有任何区别。在后退按钮请求中,由于仍然需要运行 javascript,它会重置所有值,而不管浏览器如何。

我不相信您可以强制浏览器以您描述的方式运行,因为这取决于每个浏览器他们希望如何实现后退按钮 - chrome 只是以不同的方式执行。

于 2010-04-29T12:57:46.717 回答
0

您还可以将 autocomplete="off" 放在表单标签上,而不是每个输入字段上。

于 2017-04-12T03:02:59.387 回答