Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net计时器更改后保持原始时间_C#_Asp.net_Timer - Fatal编程技术网

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

C# ASP.Net计时器更改后保持原始时间,c#,asp.net,timer,C#,Asp.net,Timer,我的ASP.NET代码中有一个使用C#的计时器,我会立即更改它的时间间隔,但是在服务器上运行时,它实际上不会卡住。计时器每10秒继续启动一次。我希望它在前10秒后启动,执行我的代码LoadReport(),然后每隔5分钟启动一次。奇怪的是在我的本地机器上调试它的行为完全符合预期,只是在它将运行的服务器上没有。我做错了什么 更新:这似乎是一个ViewState问题,但我不知道如何解决它。不仅计时器没有保持它的时间间隔,而且当我使页面上的图表可见时,它们就不可见了。这就好像在服务器上,对页面视图的任

我的ASP.NET代码中有一个使用C#的计时器,我会立即更改它的时间间隔,但是在服务器上运行时,它实际上不会卡住。计时器每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();
}

受保护的无效TimerRefreshDashboards_Tick(对象发送方、事件参数e)
{
TimerRefreshDashboards.Interval=300000;
LoadReport();
}

一天结束时,
控件仍然需要转换为HTML、javascript和CSS的组合,以便浏览器理解它。(甚至连Internet Explorer都不理解原始的.NET webforms标记,所以你不能指望chrome、FF等会这样做)

当您在浏览器中查看页面的HTML源代码,并查看webforms标记的位置时,您将看到如下内容:

<script type="text/javascript">
    setTimeout(10000, RunPostBackCode(args);
</script>
但假设您不重新加载页面。假设您将它放在ajax面板或更新面板中,或者其他任何地方。如果不重新加载页面,也就是不刷新HTML的纯文本,那么原始的
10000
仍将存在


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

它是一个单服务器环境。它确实进行了其他更改,.dll上的日期是最新的。最后,我手动将几个月前的文件复制回服务器,然后从VisualStudio重新部署,现在看来已经成功了。我甚至不需要改变任何事情。我上面的原始代码现在可以工作了。

如果你想在代码中调整间隔,那么你只需要在代码中设置它。与使用标记类似,在代码中设置txtBox.Text=“someOthervalue”不会更改文本,因为它是在标记中静态设置的。我无法回避的奇怪问题是,为什么在我的开发机器上运行时它会工作?它位于ajax面板
asp:UpdatePanel
中,如果有帮助的话。我甚至尝试在page_load中更改该值,但在服务器上运行时,无论我在page_load中添加了什么,它都会停留在asp:Timer标记中的任何位置。奇怪的是,在page_load中更改的内容不会传播到html中。检查事项:是否将bin/.dll部署到服务器?后端代码从那里运行,即使标记在.aspx文件中。您是否使用任何奇怪的设置运行IIS?我从来没有听说过.aspx页面呈现正确,但回发处理不正确。您是否在具有多个Web服务器的Web服务器场中运行?如果一台服务器更改了值,但您得到了另一台服务器的表单,那么它将具有原始值。这是一个单服务器环境。它确实进行了其他更改,.dll上的日期是最新的。最后,我手动将几个月前的文件复制回服务器,然后从VisualStudio重新部署,现在看来已经成功了。我甚至不需要改变任何事情。我上面的原始代码现在可以工作了。我仍然想知道为什么我这么做有效。我猜你在git或SVN中使用了一些分支,最终部署了一个较旧的版本,但这假设了很多。我认为VS每次进行部署时都会编译fresh dll,但如果不是这样,那也可能是原因。最后,我同意您的观点,部署工具在web发布方面已经有一段时间了,所以这可能只是一个侥幸。很高兴你解决了。
<script type="text/javascript">
    setTimeout(300000, RunPostBackCode(args);
</script>