【问题标题】:How to run JavaScript prior to System.Web.UI.Timer OnTick?如何在 System.Web.UI.Timer OnTick 之前运行 JavaScript?
【发布时间】:2009-01-13 16:27:27
【问题描述】:

我需要一个客户端脚本来确认 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

【问题讨论】:

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


    【解决方案1】:

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

    例如:

    1. 获得对您的计时器的引用。 (例如:$find(‘&lt;%= Timer1.ClientID %&gt;’);
    2. 停止计时器。
    3. 创建一个具有相同间隔的新计时器。
    4. 执行您的计时器并导致条件。
    5. 根据条件的返回值..您可以将服务器生成的计时器间隔设置为 ~0 并启动/停止。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2011-02-24
        • 2020-12-09
        • 2020-08-19
        • 1970-01-01
        相关资源
        最近更新 更多