gpt4 book ai didi

asp.net - 为什么不像 'IsRefresh' 一样实现 'IsBackPost' 、 'IsPostBack' ?

转载 作者:行者123 更新时间:2023-12-02 16:39:38 24 4
gpt4 key购买 nike

我可以看到,我自己和很多人都在 ASP.NET 中的这两个项目上遇到了麻烦...刷新按钮、后退按钮...(我看到很多人都在问如何禁用这两个按钮在浏览器中..)

现在在 Page 中实现另外两个 bool 变量(IsRefresh、IsPostBack)有什么问题...如果这些问题可以被规避并实现,这对开发人员来说将是一笔巨大的财富...

当您回答时,如果您还可以在网络应用程序中包含您正在采取的步骤,以避免在这种情况下重新发布(有时在数据库中),那将会很有帮助。

谢谢

最佳答案

实现两个附加 bool 属性的问题是,确实没有(可靠的)方法来区分 Back/Refresh 触发的请求。当点击这些按钮时,浏览器将:

  1. 如果允许,显示缓存中的页面,或者
  2. 再次执行完全相同的请求(可能首先要求用户确认)

您遇到的是情况#2。当第二个请求发生时,服务器将收到与原始请求完全相同的请求数据。因此,ASP.NET(以及大多数其他框架)将像处理原始请求一样处理该请求。有多种方法可以解决此问题:

  1. 更改缓存策略以允许浏览器重新显示之前请求的结果(可能会解决返回问题,但不能解决刷新问题)。
  2. 添加一个隐藏字段(或 ViewState 中的数据),其中包含预期回发的页面上的唯一值。然后添加一些数据结构来保留“已使用”值的列表,以及在执行任何关键操作之前测试重复项的逻辑。
  3. 使用Post/Redirect/Get pattern确保 POST 请求永远不会出现在浏览器历史记录中。

解决方案 #3 非常简单,几乎适用于所有情况。基本上,不是返回结果/确认作为对“关键”回发的回复,而是重定向到新的 URL:

protected void btnCritical_Click(object sender, EventArgs e)
{
DoSomethingThatShouldNotBeDoneTwice();
Response.Redirect("confirmation.aspx");
}

关于asp.net - 为什么不像 'IsRefresh' 一样实现 'IsBackPost' 、 'IsPostBack' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com