这里发布了一些类似的问题,但没有一个真正满足我的需求。
我在一个页面上有一个项目列表,我们称之为masterlist.aspx。如果我点击其中一个列表项,则会出现另一个页面,即details.aspx?id = something。
出现的页面在编辑模式下具有表单视图控件。如果用户想要编辑数据,他们会点击编辑链接按钮,然后将表单发送到编辑模式,然后他们编辑数据并单击保存按钮,保存数据并将表单视图重新置于查看模式。
问题是,如果用户使用浏览器后退按钮返回到masterlist.aspx页面,页面未更新,则会从浏览器缓存中退出。
我已经玩过HTTP标头缓存设置但无法获得适用于所有主流浏览器的任何内容。在某些浏览器上,我收到网页过期警告。另一种选择是在使用客户端代码加载页面时以某种方式触发页面刷新(或部分页面刷新),但我无法弄清楚如何执行此操作。
是否有任何其他方法或有任何人使用上述两种方法取得成功,或者是否有某种方法可以完全避免这个问题。
答案 0 :(得分:33)
我必须在目录中执行类似这样的操作,在每个加载时需要从数据库加载浏览页面,因为当您点击产品页面时,它会呼叫第三方获取更新信息,然后保存如果它应该更新。当您按下后退按钮时就是如此,因为您说数据已重新加载。我所做的就是将它添加到页面中,它似乎在所有浏览器中都能正常工作。
public class ProductBrowser : Page
{
protected override void OnInit(EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);
base.OnInit(e);
}
}
答案 1 :(得分:0)
如何捕获后退按钮按键事件,然后不是允许它执行browser.history.back(),您可以执行document.location(...)调用。
或者,您可以捕获后退事件并触发回发,这可以执行Response.Redirect(“yourpage”)。这将强制浏览器为指定页面发出GET语句,并使其刷新
答案 2 :(得分:0)
使用Javascript可能无法获得完整的解决方案,但有一种解决方法。
http://www.boutell.com/newfaq/creating/backbutton.html
它使用超时功能,反复强制浏览器执行“转发”操作。即使有人单击“后退”按钮,它也会返回实际页面,从而使Back操作无效。它可能会导致闪烁。
答案 3 :(得分:0)
我玩过HTTP标头缓存设置,但无法获得适用于所有主流浏览器的任何内容。在某些浏览器上,我收到网页过期警告。
您如何访问该主列表页面?如果您发出HTTP GET 并阻止客户端和代理缓存它,那么导航回到它(并且仍然获得更新版本)没有问题。
这将使您获得服务器端缓存(当任何项更改时适当的失效)或根本没有缓存。