【问题标题】:How to empty ASP.net postback cache?如何清空 ASP.net 回发缓存?
【发布时间】:2017-03-14 22:40:16
【问题描述】:

我刚看了What is a postback?

我有一个 asp.net 网络表单,我在其上单击一个按钮来填充服务器端 C# 变量。如果我是正确的,这是通过 HTTP POST 发生的(回发,因为我使用 HTTP 请求的正文将用户提供的数据与网络表单一起重新发送回服务器)

当服务器收到回发后,它会向客户端发送一些指令(例如“显示警报消息”)。

我的问题是,当我刷新 (F5) 网络表单时,最后执行的任何操作都会重新执行。因此,当我刷新页面时会重新执行回发,从而触发来自服务器的响应。

如何禁用此行为?我的意思是,按 F5 怎么能像第一次一样重新加载页面(我想我所有的变量后面的代码也将恢复为默认值......)

【问题讨论】:

  • 讨厌这样说,但 Web 表单开发人员有点坚持这种行为。避免这种情况的唯一方法是确保用户正在查看的页面来自 GET 而不是 POST。在 MVC 中很容易,但在 Web 表单中很难。
  • @JohnWu 现在对 MVC 了解不多……但是您知道我如何“抓住” F5 吗?然后我会手动处理它

标签: c# asp.net webforms


【解决方案1】:

这是默认浏览器行为。如果表单已提交 (PostBack),F5 将始终触发重新发布。

您可以通过在回发后再次重定向到同一页面来解决此问题

Response.Redirect(Request.RawUrl, false);

但是,如果您使用它,您将无法像往常一样获得对客户端的响应。只有在重定向之前设置一个 Session,然后在重定向之后在页面上进行处理,这是从服务器获得响应的唯一方法。

最好确保转发不会产生任何问题,例如重复的数据库条目等。

【讨论】:

  • 是的。处理重复的帮助。但是是不是不能让F5恢复整个页面(包括后面的代码)就好像第一次加载一样?
  • 或者您知道我如何“抓住” F5 吗?然后我会手动处理它
  • 不,正如 John Wu 已经提到的,它是 aspnet webforms 不可或缺的一部分。唯一接近的是使用UpdatePanels
  • 谢谢。我会调查的。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2017-10-20
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多