返回按钮刷新页面

17

这里有一些类似的问题,但都没有真正解决我的需求。

我在一个页面上有一个项目列表,让我们称其为masterlist.aspx。如果我点击其中一个列表项,将出现另一页,即details.aspx?id=something。

出现的页面处于编辑模式下的formview控件。如果用户想要编辑数据,他们会点击编辑链接按钮,表单将进入编辑模式,然后他们编辑数据并单击保存按钮,保存数据并将formview放回查看模式。

问题在于,如果用户使用浏览器的返回按钮返回到masterlist.aspx页面,则该页面不会更新,而是从浏览器缓存中提取。

我已经尝试过HTTP头缓存设置,但不能在所有主流浏览器上得到有效结果。在某些浏览器上,我会收到网页过期警告。另一种选择是通过客户端代码在页面加载时以某种方式触发页面刷新(或部分页面刷新),但我无法弄清楚如何实现。

是否有其他方法或者有人成功实现了上述两种方法,或者有没有完全避免这个问题的方法。


这是因为ASP.net使用一个包含整个页面的POST表单。我不知道如何修复它,但这可能会对你有所帮助。 - user142019
4个回答

36

我需要在一个目录中执行类似这样的操作,浏览页面需要在每次加载时从数据库中加载,因为当你点击产品页面时,它会调用第三方获取更新信息,然后如果应该更新则保存它。这是为了让当你返回到之前的页面时数据可以被重新加载。我将其添加到页面中,所有浏览器看起来都能正常工作。

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

谢谢你,我们之前尝试过多次。在Firefox和IE9中也能正常工作。 - penderi
1
必须将base.OnInit(e)移除才能在VB.Net中正常工作。 - yougotiger

0

如何捕获“返回”按钮的按键事件,然后不允许它执行browser.history.back(),而是可以进行document.location(...)调用。

或者,您可以捕获后退事件并触发一个post-back,该post-back可以执行Response.Redirect("yourpage")。这将强制浏览器为指定页面发出GET语句,并使其刷新。


0

使用JavaScript可能无法实现完整的解决方案,但有一个变通方法。

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

它使用一个超时函数,重复强制浏览器执行“前进”操作。即使有人点击了“后退”按钮,它也会带回到实际页面,从而使后退操作无效。但这可能会导致闪烁。


如果页面上有任何表单元素(例如登录表单),请小心使用此方法。它有可能在用户输入字段时刷新页面。 - Casey Watson

0
我已经尝试过调整HTTP头缓存设置,但无法在所有主流浏览器上实现有效的缓存。在某些浏览器上,我会收到网页过期警告。
如果您发出HTTP GET请求并防止客户端和代理缓存它,您将没有任何问题返回该主列表页面(并仍然获取更新版本)。
这将使您只能使用服务器端缓存(在任何这些项目更改时进行适当的失效),或者根本不使用缓存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接