5

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

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

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

我该如何解决这些问题?在触发第一个刻度后或用户单击按钮后,如何在客户端禁用计时器?或者解决我的任务的更好方法是什么?谢谢。

4

2 回答 2

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);" />
于 2012-09-24T15:11:16.827 回答
1

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

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

  2. 如此处所述,我可以asp:Timer像这样禁用 javascript:

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

    然后我将它绑定到我的按钮onclick事件,我就完成了。由于 timer 放置在 中UpdatePanel,因此它会在回发后自动重新创建和启用。

于 2012-09-25T10:46:08.777 回答