为啥我在 SharePoint WebPart 中的输入没有更改值?

Posted

技术标签:

【中文标题】为啥我在 SharePoint WebPart 中的输入没有更改值?【英文标题】:Why doesn't my input in my SharePoint WebPart changes value?为什么我在 SharePoint WebPart 中的输入没有更改值? 【发布时间】:2018-07-07 01:38:49 【问题描述】:

我正在尝试使用 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;

感谢您的帮助。

【问题讨论】:

如果您需要使用服务器端逻辑更新输入的值,那么您可以使用UpdatePanel。这允许服务器端回发异步发生,因此更新客户端输入值。 @tigerdi 谢谢!我检查了 UpdatePanels,它就像一个魅力。 【参考方案1】:

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

https://www.w3schools.com/js/js_timing.asp

【讨论】:

【参考方案2】:

我按照@tigerdi 的建议查找了 UpdatePanels,我能够使用 ASP 计时器从服务器端更新 html。这是我找到的解决方案:

这是我的更新面板和计时器。

<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();

【讨论】:

以上是关于为啥我在 SharePoint WebPart 中的输入没有更改值?的主要内容,如果未能解决你的问题,请参考以下文章

sharepoint webpart xlsx 要列出

从一个 webpart 访问信息并在 sharepoint 2010 中的另一个 webpart 中使用它

如何限制 Sharepoint 2010 WebPart 中 HtmlTable 中单元格的宽度?

如何部署 SharePoint WebPart?

SharePoint WebPart 显示两次 - 帮助!

尝试通过 CLI 发布 SharePoint Webpart