好的,我有一个特别令人困惑的问题,我不确定我最好的选择是修复它。我有一个带有按钮的asp.net页面,按钮的处理程序(由于我的直接控制/修复能力之外的原因)偶尔需要一段时间才能完成。在处理程序结束时,我有一个Response.Redirect调用。如果用户在按钮处理程序运行时点击“刷新”,它将完成运行按钮按下的处理程序(正常),但随后重新加载页面,而不是处理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秒Thread.Sleep期间点击刷新,则会忽略response.Redirect。
我需要找出一种方法来强制使用Response.Redirect。我有一种感觉,我必须在Page_Load事件中处理它,该事件由用户点击刷新触发(即有一个会话变量被创建,如“handling_button”或我检查的东西,只是重定向,如果它被检测到页面加载,当我到达Redirect位置时会被删除),但我希望有一些我在这里错过的东西更优雅。
答案 0 :(得分:1)
当您点击 f5 时,它会指示浏览器放弃当前页面,并为当前地址发出新请求。
我认为没有一个干净的解决方案可以解决你的问题。
javascript具有window.onbeforeunload
属性,但我认为这不会起作用,因为在请求重新加载时,导航事件已经启动。
似乎唯一的解决方案是在原始页面中进行测试,以检测请求是否已经完成。
它可能有助于用户感知在表单提交上使用javascript事件处理程序来显示微调器。