为什么我的SharePoint WebPart中的输入不会更改值?

时间:2018-01-28 03:42:59

标签: javascript c# sharepoint sharepoint-2013 web-parts

我试图在我的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;

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您的计时器代码和Timer对象正在服务器端代码中运行。页面加载后,服务器端代码无法更改客户端HTML。如果您希望标记每n秒/毫秒更新一次,那么您应该使用客户端站点Javascript setTimeout(函数,毫秒)或setInterval(函数,毫秒)。

https://jsfiddle.net/yx27xf7h/6/

答案 1 :(得分:0)

我查看了UpdatePanels,因为@tigerdi建议我,我可以使用ASP Timer从服务器端更新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();
}