如何在System.Web.UI.Timer OnTick之前运行JavaScript?

时间:2009-01-13 16:27:27

标签: asp.net javascript asp.net-3.5 timer confirmation

我需要一个客户端脚本来确认Timer的OnTick事件可以继续。

如何在发生Timer1回发之前调用 CanContinue()
如果用户选择取消,如何取消回发?

<%@ Page Language="C#" %>
<script runat="server">
    protected void Timer1_OnTick(object sender, EventArgs e)
    {
        Response.Write("Last Postback: " + DateTime.Now.ToString());
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Timer Test</title>
    <script type="text/javascript" language="javascript">
        function CanContinue() {
            return confirm('The page is requesting new data.  Ok or Cancel?');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_OnTick" Interval="300000" />
    </form>
</body>
</html>

注意:有些读者可能会每隔x分钟显示一次模态确认。我同意这对可用性来说很差,但我无法改变设计。


更新:毕竟我决定不使用计时器。有关替代解决方案的详细信息,请参阅this post

2 个答案:

答案 0 :(得分:0)

我不知道是否有办法配合计时器生成的方法来调用服务器操作。但是,您可以获得对javascript组件的引用并启动/停止或更改间隔。考虑到这一点,你可以做一些讨厌的黑客攻击来获得你想要的功能。

例如:

  1. 获取对计时器的引用。 (例如:$find(‘<%= Timer1.ClientID %>’);
  2. 停止计时器。
  3. 以相同的间隔创建一个新的计时器。
  4. 执行您的计时器并导致该情况。
  5. 根据条件的返回值,您可以将服务器生成的计时器间隔设置为~0并启动/停止。
  6. 这不是一个优雅的解决方案,但我不能说我曾经使用内置的asp.net计时器,所以我不能提供太多的洞察力。

答案 1 :(得分:0)

毕竟我决定不使用Timer。有关替代解决方案的详细信息,请参阅this post