ASP.净的回应.如果按下refresh,则在按钮处理程序中忽略Redirect



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

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

<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秒线程中点击刷新。睡觉,这是回应。重定向被忽略

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

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

我认为对于你正在尝试做的事情没有一个干净的解决方案。

javascript有window.onbeforeunload属性,但我不认为这将在这里工作,因为在重新加载请求的时候,一个导航事件已经被启动。

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

在表单提交时使用javascript事件处理程序来显示一个旋转器,这可能有助于用户的感知。

最新更新