ASP.NET中的Post back和浏览器返回按钮问题

4

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

问题:

我的代码如下:

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

当用户点击“浏览器返回”按钮时,不会执行代码。只是从缓存中显示数据。 如何在浏览器返回按钮点击时执行代码?
2个回答

2
这是一个与ASP.Net相关的全球性问题。大多数开发人员都像Windows开发人员一样思考。这导致几乎任何操作,包括导航操作,都会以postback方式结束。
为了解决这些问题:
  • 避免使用按钮来更改页面。生成一个带有目标URL的超链接。
  • 将页面的部分内容包装在update panel中。好处是浏览器不会在每次postback后看到页面更改。然后,您将能够“刷新”页面而不会出现警告对话框
  • 在填充网格时,不要从代码中“选择”行,而是生成一个带有“?ID=42”的链接到同一页,并将此值绑定到网格作为selectedvalue。
这种“邪恶”行为的根本原因是,postback是使用HTTP Post请求发出的。然后,浏览器需要重新提交页面以重建它。
使用上述技术,您正在发出GET请求。这种请求不需要重新提交任何内容。

下投票的原因: 同意我们不使用 postbacks 进行导航的部分。其余部分与整个 asp.net 框架的理念不太协调,它确实试图像 winforms 开发一样运行,并且我们在 postbacks 中执行操作... - Casper Leon Nielsen

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

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