Javascript 不适用于 ASP.NET 上的 Timer Tick 方法
Posted
技术标签:
【中文标题】Javascript 不适用于 ASP.NET 上的 Timer Tick 方法【英文标题】:Javascript wont work on Timer_Tick method on ASP.NET 【发布时间】:2013-11-26 16:07:02 【问题描述】:我有一个计时器,它每 2 秒计时一次,并获取不断变化的百分比值,当它显示在标签中时效果很好。我想要同样的东西,但要使用 javascript 在消息框中显示,第一次显示很好,但是当值更改时,警报弹出窗口中的值保持不变。
protected void TimerProgress_Tick(object sender, EventArgs e)
percent = max_time.PercentGoalMetToday(i.ToString());
lbPercent.Text = percent; //WORKS
JavaScriptMethod();
protected void JavaScriptMethod()
StringBuilder sb = new StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append("function main()");
sb.Append("alert('");
sb.Append(percent);
sb.Append("');");
sb.Append("var myVar = setInterval(function () main() , 4000);");
sb.Append("</script>");
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
ASPX
<asp:UpdatePanel ID="UpdatePanelProgressBar" runat="server">
<ContentTemplate>
<asp:Label ID="lblPercent" runat="server" Text="" CssClass="Percent"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer" Interval="2000" runat="server" OnTick="TimerProgress_Tick">
</asp:Timer>
【问题讨论】:
这个服务器端定时器如何更新客户端上下文? 在 ASPX 页面的更新面板中。 @Apollo,这就是 JavaScript 保持不变的原因。它不在更新面板内。 @MichaelPerrenoud JS 不适用于更新面板。 @Apollo,我并不是说你不能用UpdatePanel
更改某些 JavaScript,我只是说用 RegisterClientScriptBlock
插入的 JavaScript 不会得到更新使用UpdatePanel
,因为它不在UpdatePanel
内。UpdatePanel
的想法是您为标记inside UpdatePanel
获得新的html。
【参考方案1】:
我将使用 SignalR 来实现这一点,它旨在让您的服务器与浏览器高效、实时地交换数据。
【讨论】:
【参考方案2】:我让它工作只需将 ClientScript.RegisterClientScriptBlock 更改为 ScriptManager.RegisterStartupScript 并刷新。
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", sb.ToString(), false);
【讨论】:
以上是关于Javascript 不适用于 ASP.NET 上的 Timer Tick 方法的主要内容,如果未能解决你的问题,请参考以下文章
IISExpress VS.Net 2015 - HTTP 错误 500.22 - 检测到不适用于集成托管管道模式的 ASP.NET 设置