我在回发后遇到简单的ASP.NET应用程序和后退按钮时遇到问题。ASP.NET浏览器显示“网页已过期”作为后退按钮(回传后)
有问题的页面上有一个简单的表单,一些文本字段等,以及一个回发(autopostback)的下拉菜单。
“正常”流程是用户填写表单并可能更改下拉菜单。基于下拉值,页面内容可能会改变。
我遇到的问题是,用户更改下拉并回发完成后,用户单击后退按钮。他们看到来自IE的“网页已过期”消息。
我设置如下:
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.Private);
但是,这似乎并没有钉上了这一问题。
实际的Cache-Control响应头读作:私营,无缓存:“设置Cookie”
在只有“私人”返回按钮的的Cache-Control响应头一个传统的ASP应用程序在“回发”后表现如预期。
有没有办法强制ASP.NET将cache-control明确地设置为“private”?或者任何其他解决方案导致后退按钮和回发协同工作?
谢谢!
这没有什么意义,我认为是到期设置为-1分钟的经典ASP应用程序,缓存控制私人让回按钮工作“按预期方式”,但一个过期设置为-1分钟并且缓存控制设置为“private,no-cache:set cookie”的ASP.NET应用程序不会。这对我来说似乎指向了“no-cache:set cookie”作为问题。 – user505765 2012-03-19 17:57:23
我明白了。不同之处在于,经典ASP没有后援可以与之抗衡。点击一个按钮会触发表单的“动作”,并且每次都会载入一个全新的页面。在ASP.NET中,如果更改下拉列表,并且该下拉列表中的“autopostback”设置为true,则浏览器实际将此视为导航到新页面。这就是回传如何实施的原因,在这种情况下,这是一个恒定的批评来源。从技术上来说,更改autopostback的下拉列表确实会触发表单上的“发布”选项,但WebForms范例会模糊它... – David 2012-03-19 18:00:10
也许这是一个更好的解释 - 对浏览器来说,每次回发实际上是一次新的页面访问,它存储在历史记录中,即使WebForms范例试图使它看起来不像开发人员那样。 – David 2012-03-19 18:03:33