我尝试使用webpart.ascx.cs中的计时器每隔n秒更改一次隐藏输入的值,以便稍后在JavaScript中检索该值,但该值似乎永远不会更改。你能帮我找出原因吗?
下面是我想要做的一个例子:
//Initialising the timer
protected void Page_Load(object sender, EventArgs e)
{
Timer timer = new Timer(10 * 1000);
timer.Elapsed += new ElapsedEventHandler(changeValue);
timer.Start();
}
private void changeValue(Object source, ElapsedEventArgs e)
{
myInput.Value = "Changed Value";
}然后,在我的ascx中,我有这样的输入:
<input id="myInput" type="hidden" runat="server" />如果我在Page_Load中调用changeValue,输入值确实会发生变化,但当随后使用计时器调用它时,该值在Javascript端保持不变。
//Work for the first time, but not when the timer elapsed.
var myInputValue = document.getElementById("myInput").value;谢谢你的帮助。
发布于 2018-01-29 01:49:49
我按照@tigerdi的建议查找了UpdatePanels,并且我能够使用ASP计时器从服务器端更新html。下面是我找到的解决方案:
这是我的UpdatePanel和定时器。
<asp:UpdatePanel id="updatePanel" runat="server" `UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="timer" OnTick="timer_Tick" Interval="10000" runat="server"></asp:Timer>
<input id="myInput" type="hidden" runat="server" />
</ContentTemplate>
然后使用事件更新,我可以更改输入的值,然后调用UpdatePanel timer_Tick ()函数,如下所示
protected void timer_Tick(object sender, EventArgs e)
{
myInput.Value = "Changed Value";
updatePanel.Update();
}发布于 2018-01-28 13:58:24
计时器代码和计时器对象都在服务器端代码中运行。页面加载后,服务器端代码就不能更改客户端HTML。如果您希望标记每隔n秒/毫秒更新一次,那么您应该使用客户端Javascript setTimeout(函数,毫秒)或setInterval(函数,毫秒)。
https://stackoverflow.com/questions/48482965
复制相似问题