ASP.Net计时器保持更改后的原始时间

时间:2014-12-16 17:26:50

标签: c# asp.net timer

我使用C#在我的ASP.NET代码中有一个计时器,我立即将其更改为Interval for,但它在服务器上运行时从未真正坚持。计时器每10秒继续发射一次。我希望它在前10秒后触发,执行我的代码LoadReport(),然后每隔一段时间等待5分钟。奇怪的是在我的本地机器上调试它的行为完全符合预期,而不是在它将运行的服务器上。我做错了什么?

更新:这似乎是一个ViewState问题,但我不知道如何修复它。不仅计时器没有保持它的间隔,而且当我在页面上制作图表时可见它们不会变得可见。就像在服务器上任何动态代码更改到页面视图被忽略,但不在开发中。我已经尝试重新启动服务器,但这并没有解决问题。

<asp:Timer ID="TimerRefreshDashboards" runat="server" Interval="10000" 
        ontick="TimerRefreshDashboards_Tick" Enabled="False">

protected void TimerRefreshDashboards_Tick(object sender, EventArgs e)
{
    TimerRefreshDashboards.Interval = 300000;

    LoadReport();
}

2 个答案:

答案 0 :(得分:0)

在一天结束时,<asp:Timer />控件仍然必须转换为HTML,javascript和CSS的某种组合,以便您的浏览器了解它。 (甚至Internet Explorer也不了解原始的.NET webforms标签,所以你不能指望chrome,FF等这样做)

当您在浏览器中查看网页的HTML源代码,并查看该网络表单标记的位置时,您会看到的内容如下:

<script type="text/javascript">
    setTimeout(10000, RunPostBackCode(args);
</script>

该标记的细节将由.NET生成,但可以说,10000参数取自Interval属性。现在,让我们说你在C#中的那个属性。如果您重新加载页面,您会看到:

<script type="text/javascript">
    setTimeout(300000, RunPostBackCode(args);
</script>

但是,假设您没有重新加载页面。假设您在ajax面板或更新面板中拥有它,或者其他任何东西。如果您不重新加载页面,AKA不会刷新HTML的纯文本,那么原始的10000仍将存在。

你不应该将回发视为一种神奇的工具。它们在与普通旧的静态.htm文件相同的限制下运行,并且在服务器上更改属性并不一定意味着它们在您修改它们的那一刻就会在浏览器上发生变化(尽管有一些技巧可以做到这一点)。回发与听起来完全一样,页面必须返回到服务器并使用新值重新加载自身,从而改变.NET将.NET标记转换为HTML以便显示正确更改的方式。 <asp:Timer />是一个特别奇怪的例子,因为它通常意味着回击行为。

答案 1 :(得分:0)

这是一个单一的服务器环境。它确实有其他变化,.dll上的日期是最新的。我几个月前手动将文件复制回服务器,然后从Visual Studio重新部署,现在似乎已经有效了。我甚至不需要改变任何东西。我上面的原始代码现在有效。