我有一个依赖于HiddenField
值的JavaScript。这个HiddenField
,我们称之为needUpdate
,是一个布尔值,当我页面上的div
需要使用JavaScript更新时,它被设置为true。 needUpdate
位于通过Timer
更新的UpdatePanel
中。我尝试了两种不同的方法,都是半途而废。第一种是将 JavaScript 放在更新面板之外,并使用我的 PageRequestManager
实例来运行脚本,如下所示:
<asp:ScriptManager ID="scriptManager" runat="server" />
<script type="text/javascript">
function DoUpdate(sender, args)
{
if ('<%= needUpdate.Value %>' == 'true') {
// Code here... //
}
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(DoUpdate);
</script>
<asp:UpdatePanel ID="replay" runat="server" Visible="false" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="replayTimer" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:HiddenField ID="needUpdate" runat="server" Value="false"/>
<asp:Timer ID="replayTimer" runat="server" Interval="500" OnTick="replayTimer_Tick" />
<!-- More Stuff Here -->
</ContentTemplate>
</asp:UpdatePanel>
<div id="divToUpdate"></div>
现在,上面的内容运行脚本,但 needUpdate
中的值永远不会更改,即使在后端也已更改。因此,我尝试了下一段代码,将脚本放在UpdatePanel
的ContentTemplate
区域中
<ContentTemplate>
<asp:HiddenField ID="needUpdate" runat="server" Value="false"/>
<asp:Timer ID="replayTimer" runat="server" Interval="500" OnTick="replayTimer_Tick" />
<script type="text/javascript">
function DoUpdate()
{
if ('<%= hf_needUpdate.Value %>' == 'true') {
// Code here... //
}
}
DoUpdate();
</script>
<!-- More Stuff Here -->
</ContentTemplate>
</asp:UpdatePanel>
虽然这更新了脚本区域,但从未调用过代码。关于如何让UpdatePanel
更改值以馈送 JavaScript 函数的任何想法?
你正在将一个错误的结果硬编码到 JavaScript if 语句中。进入页面的内容:
'<%= hf_needUpdate.Value %>' == 'true'
??
'false' == 'true'
??
这永远不会改变获取隐藏字段的当前值所需的内容。
var needUpdate = document.getElementById("needUpdate").value;
if(needUpdate == "true) {
// Do work
}