为什么我在 SharePoint WebPart 中输入的值没有改变?
Why doesn't my input in my SharePoint WebPart changes value?
我试图在 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;
感谢您的帮助。
您的计时器代码和 Timer 对象在服务器端代码中 运行。页面加载后,服务器端代码无法更改客户端 HTML。如果您希望标签每 n seconds/milliseconds 更新一次,那么您应该使用客户端站点 Javascript setTimeout(function, milliseconds) 或 setInterval(function, milliseconds).
我按照@tigerdi 的建议查找了 UpdatePanel,我能够使用 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>
然后通过事件 timer_Tick,我可以更改输入的值,然后像这样调用 UpdatePanel Update() 函数
protected void timer_Tick(object sender, EventArgs e)
{
myInput.Value = "Changed Value";
updatePanel.Update();
}
我试图在 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;
感谢您的帮助。
您的计时器代码和 Timer 对象在服务器端代码中 运行。页面加载后,服务器端代码无法更改客户端 HTML。如果您希望标签每 n seconds/milliseconds 更新一次,那么您应该使用客户端站点 Javascript setTimeout(function, milliseconds) 或 setInterval(function, milliseconds).
我按照@tigerdi 的建议查找了 UpdatePanel,我能够使用 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>
然后通过事件 timer_Tick,我可以更改输入的值,然后像这样调用 UpdatePanel Update() 函数
protected void timer_Tick(object sender, EventArgs e)
{
myInput.Value = "Changed Value";
updatePanel.Update();
}