2009-07-27 173 views
15

这里发布了一些类似的问题,但没有一个能够真正解决我的需求。后退按钮刷新页面

我有一个页面上的项目列表,可以称之为masterlist.aspx。如果我点击其中一个这些列表项,则会出现另一个页面,即details.aspx?id = something。

出现的页面在编辑模式下有一个formview控件。如果用户想要编辑他们点击编辑链接按钮的数据,表单将被发送到编辑模式,然后他们编辑数据并单击保存按钮,保存数据并将窗体视图恢复到查看模式。

问题是,如果用户使用浏览器后退按钮返回到masterlist.aspx页面,页面不会更新,则会将其从浏览器缓存中取出。

我玩过HTTP头缓存设置,但无法获得适用于所有主流浏览器的任何内容。在某些浏览器上,我收到了网页过期警告。另一个选择是以某种方式触发页面刷新(或部分页面刷新),当页面加载使用客户端代码时,但我一直无法弄清楚如何做到这一点。

是否有任何其他方法或者有人使用上述两种方法获得成功,或者有什么方法可以完全避免此问题。

+0

这是因为ASP.net使用包含整个页面的POST表单。我不知道如何解决这个问题,但它可能会帮助你。 – 2009-07-27 16:48:38

回答

31

我必须在浏览页面需要从数据库加载每个负载的目录中这样做,因为当您点击产品页面时,它会呼叫第三方获取更新的信息,然后保存它是否应该更新。当你点击后退按钮时,就像你说数据被重新加载一样。我所做的是将其添加到页面中,并且它在所有浏览器中都能正常工作。

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); 
    } 
} 
+0

为我的同事在铬和6工作。 – Merritt 2010-04-27 22:03:26

0

那么捕获后退按钮键盘事件怎么样,然后,而不是允许它做一个browser.history.back(),你可以做一个document.location(...)调用。

或者,您可以捕获后退事件并触发回传,可以执行Response.Redirect(“yourpage”)。这将迫使浏览器为指定页面发出GET语句并使其刷新

0

使用Javascript可能无法提供完整的解决方案,但有一种解决方法。

http://www.boutell.com/newfaq/creating/backbutton.html

它使用多次迫使浏览器执行“前进”操作超时功能。即使有人点击“后退”按钮,它也会返回到实际页面,从而使Back操作无效。它可能会导致闪烁。

+0

如果页面上有任何表单元素(如登录表单),请小心此方法。它有可能在用户输入字段时刷新页面。 – 2009-10-19 16:12:50

0

我玩过HTTP头缓存设置,但无法获得适用于所有主流浏览器的任何内容。在某些浏览器上,我收到了网页过期警告。

如何进入该列表页面?如果您发出HTTP GET 阻止客户端和代理缓存它,您将不会有任何问题导航回它(并且仍然获得更新版本)。

这给服务器端缓存留下了空间(当这些项目中的任何一个发生改变时都会发生适当的失效)或者根本没有缓存。