【问题标题】:Back button refresh page返回按钮刷新页面
【发布时间】:2010-11-14 10:16:01
【问题描述】:

这里发布了一些类似的问题,但没有一个能真正满足我的需求。

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

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

问题是如果用户使用浏览器后退按钮返回到 masterlist.aspx 页面,该页面没有更新,它会从浏览器缓存中拉出。

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

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

【问题讨论】:

  • 这是因为 ASP.net 使用包含整个页面的 POST 表单。我不知道如何解决这个问题,但它可能会对你有所帮助。

标签: asp.net


【解决方案1】:

我必须在目录中执行类似的操作,每次加载时都需要从数据库加载浏览页面,因为当您点击产品页面时,它会调用第 3 方以获取更新信息,然后保存它如果它应该更新。当您点击返回按钮时就是这样,就像您说数据已重新加载一样。我所做的是将此添加到页面中,并且它似乎在所有浏览器中都可以正常工作。

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。
  • 必须取出 base.OnInit(e) 才能在 VB.Net 中工作。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 如果页面上有任何表单元素(如登录表单),请小心使用此方法。它有可能在用户输入字段时刷新页面。
    【解决方案4】:

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

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

    这使您可以使用服务器端缓存(当任何这些项目发生更改时会适当地失效)或根本没有缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-26
      • 1970-01-01
      相关资源
      最近更新 更多