如何防止asp:Timer在生成响应之前发送tick?

时间:2012-09-24 14:36:55

标签: asp.net asynchronous timer postback

我有一个ASP.NET网站。我希望用户做出决定并在一定时间内点击其中一个给定按钮并将其重定向到另一个页面。如果他没有做出决定,他仍然会被重新定向在我头上的“无选择”标记。

我使用asp:Timer在时间结束后启动回发。我在Response.Redirect('page.html', false)处理程序中调用Page_Load进行重定向。在这种情况下,我可以在实际重定向之前处理button_clicktimer_tick个事件。处理完其中一个事件后,将呈现页面并完成重定向。

但我有两个问题。首先,如果输入处理的时间足够长,则会触发第二个计时器的滴答,启动新的回发,并取消当前的电流!其次,如果用户在时间到来之前单击一个按钮,则在重定向完成之前会发生计时器滴答,并且它会再次覆盖用户点击的处理!

如何解决这些问题?如何在触发第一个滴答或用户点击按钮后在客户端禁用定时器?或者解决我的任务的更好方法是什么?感谢。

2 个答案:

答案 0 :(得分:1)

作为变体,您可以使用客户端setTimeout函数而不是Timer控件,并在按钮单击时清除超时:

 <script type="text/javascript">
      var redirectTimeout = setTimeout(function () {
           location.href = '<%= ResolveClientUrl("~/page.html") %>';
      }, 5000);
 </script>

 <asp:Button runat="server" ID="SubmitButton" Text="Submit" 
      OnClientClick="clearTimeout(redirectTimeout);" />

答案 1 :(得分:1)

我得到了两个问题的解决方案。

  1. 我将asp:Timer放在asp:UpdatePanel控件中。在我的情况下,这是正确的做法,因为我不需要在下一个问题之前刷新整个页面。但我发现在这种情况下,来自计时器的滴答声不会相互干扰。

  2. 正如here所描述的,我可以使用这样的JavaScript禁用asp:Timer

    $find("TimerMaxJudgeTime")._stopTimer();
    

    然后我将它绑定到我的按钮'onclick事件,我就完成了。由于计时器位于UpdatePanel内,因此会在回发后自动重新创建并启用。