0

好的,我遇到了一个特别令人困惑的问题,我不确定修复它的最佳选择是什么。我有一个带有按钮的 asp.net 页面,并且按钮的处理程序可能(由于我无法立即控制/修复能力之外的原因)偶尔需要一段时间才能完成。在处理程序结束时,我有一个 Response.Redirect 调用。如果用户在按钮处理程序运行时点击刷新,它将完成按钮按下处理程序的运行(好),然后重新加载页面,而不是处理 Response.Redirect。

我花了很长时间才弄清楚这就是正在发生的事情,但是一旦我弄清楚了,我就能够在一些非常简单的示例代码中重现它。我在 VS 2010(针对 .Net 4)中创建了一个新的 C# .Net web 项目,在主页上添加了一个按钮:

<asp:button id="btnSubmit" runat="server" OnClick="btnSubmit_Click" text="Submit"/>

然后将处理程序代码添加为仅休眠 10 秒(让我有时间点击刷新):

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Thread.Sleep(10000);
    Response.Redirect("about.aspx");
}

果然 - 如果我让按钮处理程序运行,它会很好地重定向(显然,正如预期的那样),但如果我在那 10 秒 Thread.Sleep 期间点击刷新,response.Redirect 会被忽略。

我需要找到一种方法来强制 Response.Redirect 被服从。我有一种感觉,我必须在由用户点击刷新触发的 Page_Load 事件中处理它(即创建一个会话变量,如“handling_button”或我检查的东西,如果检测到它就重定向页面加载,当我到达重定向位置时会被删除),但我希望我在这里遗漏了一些更优雅的东西。

4

1 回答 1

1

当您点击 时f5,它会指示浏览器放弃当前页面,并对当前地址进行新的请求。

我认为您尝试做的事情没有一个干净的解决方案。

javascript 具有该window.onbeforeunload属性,但我认为这不会在这里起作用,因为在请求重新加载时,已经启动了导航事件。

似乎唯一的解决方案是在您的原始页面中进行测试,以检测请求是否已经发出。

在表单提交上使用 javascript 事件处理程序来显示微调器也可以帮助用户感知。

于 2013-04-29T18:57:36.403 回答