代码之家  ›  专栏  ›  技术社区  ›  Robert Claypool

如何在system.web.ui.timer ontick之前运行javascript?

  •  0
  • Robert Claypool  · 技术社区  · 16 年前

    我需要一个客户端脚本来确认计时器的ontick事件是否可以继续。

    如何调用 CAN() 在发生时间1回发之前?
    如果用户选择取消,如何取消回发?

    <%@ 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 回复  |  直到 9 年前
        1
  •  0
  •   Quintin Robinson    16 年前

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

    例如:

    1. 获取计时器的参考。(类似于: $find(‘<%= Timer1.ClientID %>’); )
    2. 停止计时器。
    3. 创建具有相同间隔的新计时器。
    4. 执行计时器并引发该情况。
    5. 取决于您的条件的返回值。您可以将服务器生成的计时器间隔设置为~0并启动/停止。

    这不是一个优雅的解决方案,但我不能说我曾经使用过内置的ASP.NET计时器,所以我不能提供太多的洞察力。

        2
  •  0
  •   Robert Claypool    9 年前

    我决定不使用计时器。见 this post 有关其他解决方案的详细信息。