好的,我遇到了一个特别令人困惑的问题,我不确定修复它的最佳选择是什么。我有一个带有按钮的 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”或我检查的东西,如果检测到它就重定向页面加载,当我到达重定向位置时会被删除),但我希望我在这里遗漏了一些更优雅的东西。