在asp.net中发布回发和浏览器后退按钮问题

时间:2014-01-31 10:15:17

标签: asp.net c#-4.0 cross-browser

我正在开发Web应用程序。我有一个向用户显示数据的网格。当用户单击网格的任何一行时,它会将用户重定向到另一个页面,因为我们在a列上有一个asp链接控件。 问题

我的代码就像

if (!Page.IsPostBack)
             {
                //CODE
             }

当用户单击BROWSER BACK按钮时,它不会执行CODE。只需显示来自CACHE的数据。 如何在浏览器后退按钮上执行CODE?

2 个答案:

答案 0 :(得分:2)

这是ASP.Net的全球性问题。大多数开发人员都喜欢Windows开发人员。它以回发结束,主要用于任何操作,包括导航操作。

解决这些问题:

  • 避免使用按钮更改页面。使用目标URL生成超链接。
  • 在更新面板中包装页面的各个部分。好处是浏览器在每次回发后都不会看到页面更改。然后,您将能够在没有警告对话框的情况下“刷新”页面
  • 填充网格时,不是从codebehin“选择”一行,而是在网址中生成一个指向“?ID = 42”的同一页面的链接,并将此值作为选定值绑定到网格

这种“邪恶”行为的根本原因是使用HTTP Post请求发布回发。然后,浏览器需要重新发布页面以重建它。

使用上面提到的技术,您将发出GET请求。这种请求不需要重新提交任何内容。

答案 1 :(得分:1)

尝试为您不想缓存的页面禁用浏览器缓存。

protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
    Response.Cache.SetValidUntilExpires(false);
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore();

    if (!Page.IsPostBack)
    {
            //CODE
    }   
}