【问题标题】:WebForms with ASP.NET AJAX: HyperLink vs LinkButton & Response.Redirect from GridView使用 ASP.NET AJAX 的 WebForms:HyperLink vs LinkBut​​ton & Response.Redirect from GridView
【发布时间】:2012-02-24 13:28:21
【问题描述】:

我有 2 个 asp.net 网络表单。第一个有ScriptManager、History、UpdatePanel和GridView;后者是 ScriptManager、UpdatePanel 和 TextBoxes。这里的前提是一个链接到可以编辑项目的详细表单的列表。

从 GridView 内部(在 UpdatePanel 内部),如果我使用 HyperLink 控件并将 url 设置为编辑页面(使用必要的参数),请更改某些内容,保存然后单击返回按钮,我会看到原始列表没有更新。按 F5 刷新会显示更改。

如果我改为在 GridView 中使用 LinkBut​​ton,并在代码隐藏中处理该 LinkBut​​ton 以执行 Response.Redirect 到相同的编辑页面(使用相同的参数),进行相同的更改,保存然后单击返回按钮,原始页面上的列表会自动刷新以显示我的更改。

请注意,发生编辑/保存的详细信息页面中的代码不会改变 - 只是它首次显示的方式发生了变化。

我的问题是:当单击后退按钮时,导致页面刷新的 Response.Redirect 是什么?是否可以为直接超链接方法复制这一点?我更喜欢使用 HyperLink 方法,因为我看不出回发的原因,但我希望 GridView 在用户浏览回它时刷新。

谢谢。

【问题讨论】:

  • 我添加了 http-headers 和缓存标签,所以也许我们会在这里找到一些这方面的专家。

标签: asp.net caching webforms asp.net-ajax http-headers


【解决方案1】:

LinkBut​​ton 会导致回发,其响应是由您的 Response.Redirect 在服务器端触发的 HTTP 302 重定向命令。因此,您的网络浏览器不会缓存旧版本的页面。

超链接控件只是呈现一个常规的<a> 标记,将您带到客户端的详细信息页面。浏览器没有理由相信页面可能已经改变,所以当你点击返回按钮时它会显示缓存的版本。

如果您想明确告诉浏览器在使用后退按钮时不要缓存页面, 使用缓存控制 HTTP 标头。 W3C Link,

在任何情况下,您都应该在详细信息页面上提供一个链接(或在接受更改时自动重定向),将用户带回 GridView/摘要页面,这样他们就不必求助于使用后退按钮。

编辑:

抱歉,之前提供的标头示例不适用于 Asp.net,但基本上你会想做这样的事情:

Response.AppendHeader("Cache-Control", "no-cache")

【讨论】:

  • 我过去曾考虑提供返回列表的链接;当用户坚持也能够使用后退按钮时,一切都会很快变得非常混乱。还有分页等问题。但是您的解释很棒-谢谢。
  • @MartinRobins 我添加了一些关于如何使用缓存控制 HTTP 标头以启用具有所需效果的超链接控件的详细信息。让我知道它是否有效。
  • 我已经尝试了缓存参数的各种组合(现在包括我对您的“Wicket”示例的解释 - Response.Headers.Add(@"Cache-Control", @"no-cache, max- age=0,must-revalidate, no-store");) 一切都无济于事。我得到的最接近的是浏览器告诉我该页面已过期并且必须刷新!
  • @MartinRobins 是的,很抱歉。我刚刚在我的编辑中测试了上面的代码,它似乎按预期工作(没有错误消息,只是强制刷新)。也许是 UpdatePanel 引起了问题?
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多