我有一个ASP.NET网站。我希望用户做出决定,并在一定的时间内单击一个给定的按钮,然后将他重定向到另一个页面。如果他没有做出决定,他仍然会被重定向,并在我的脑海中留下“没有做出选择”的标记。
我使用asp:Timer
在时间用完后启动回发。我正在通过在Page_Load
处理程序中调用Response.Redirect('page.html', false)
来进行重定向。在这种情况下,我可以在实际重定向之前处理button_click
或timer_tick
事件。在这些事件之一被处理之后,页面被呈现并完成重定向。
但我有两个问题。首先,如果输入处理的时间足够长,则触发第二个计时器的计时,启动新的回发,并取消我的当前!其次,如果用户在时间到期前单击一个按钮,定时器滴答会在重定向完成之前发生,并再次覆盖对用户单击的处理!
如何解决这些问题?如何在客户端禁用计时器,在触发第一个滴答后或用户点击按钮后?或者解决我的任务的更好的方法是什么?谢谢。
发布于 2012-09-25 18:46:09
我找到了这两个问题的解决方案。
asp:Timer
放在asp:UpdatePanel
控件中。对于我来说,这是正确的做法,因为我不需要在下一个问题之前刷新整个页面。但是我发现在这种情况下,来自定时器的滴答声并不会相互干扰。asp:Timer
:$find("TimerMaxJudgeTime")._stopTimer();
然后我将它绑定到按钮的onclick
事件上,就完成了。由于计时器放置在UpdatePanel
中,因此在回发后会自动重新创建并启用它。
发布于 2012-09-24 23:11:17
作为一种变体,您可以使用客户端setTimeout
函数来代替计时器控件,并在按钮单击时清除超时:
<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);" />
https://stackoverflow.com/questions/12567226
复制相似问题