ASP.NET浏览器显示"网页已过期"的后退按钮(回发后)

use*_*765 6 asp.net back-button cache-control

我在使用简单的ASP.NET应用程序和回发后的后退按钮时遇到了问题.

有问题的页面上有一个简单的表单,一些文本字段等,以及一个用于回发的下拉列表(autopostback).

"正常"流程是用户填写表单并可能更改下拉列表.根据下拉值,页面内容可能会更改.

我遇到的问题是,在用户更改了下拉列表并且回发已完成后,用户单击后退按钮.他们看到来自IE的"网页已过期"消息.

我设置了以下内容:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.Private);
Run Code Online (Sandbox Code Playgroud)

但这似乎没有解决问题.

实际的Cache-Control响应头读取为:private,no-cache:"Set-Cookie"

在一个经典的ASP应用程序中,只有"私有"的Cache-Control响应头,后退按钮在"回发"后表现如预期.

反正是否强制ASP.NET将缓存控制明确设置为"私有"?或任何其他导致后退按钮和回发一起工作的解决方案?

谢谢!

Dav*_*vid 1

您正在处理的实际上是一个老问题。从本质上讲,您看到“网页已过期”消息的原因是采用了禁用“后退”按钮的技术之一。该技术将缓存设置为过去的日期,因此如果用户单击“后退”按钮,浏览器就会显示此错误。

这就是这行代码:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 
Run Code Online (Sandbox Code Playgroud)

与其他框架相比,这一直是一个问题,特别是对于 WebForms ASP.NET,因为回发的工作原理。

为了全面解释所涉及的所有问题,我强烈建议阅读下面链接的文章。它不会直接回答您的问题,但我认为您会从中获得比简单答案更多的信息,并将帮助您思考您的选择,更好地理解当前的问题。请务必阅读第 1 部分和第 2 部分。

https://web.archive.org/web/20210927201700/http://www.4guysfromrolla.com/webtech/111500-1.shtml

我确实有一个关于如何使“后退”按钮再次表现得像“后退”按钮的想法,这样回发就不会被视为页面导航:

就我个人而言,当我不希望 postbacl/后退按钮冲突时,我采用了一种(可以说是黑客/草率)方法,即仅将内容放入 UpdatePanel 中,因为无论如何我在大多数应用程序中都使用 Ajax。这会强制“后退”按钮实际上返回到上一页,而不是停留在同一页面上,而是恢复到回发之前的控制值。