我有一个依赖于HiddenField
值的JavaScript。这个HiddenField
,我们将其称为needUpdate
,是一个布尔值,当我的页面上的div
需要使用JavaScript更新时,该布尔值设置为true。 needUpdate
位于UpdatePanel
,通过Timer
进行更新。我尝试了两种不同的方法,两种方法都有效。第一种是将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
中的值永远不会改变,即使它在后端被更改了。所以,我尝试了下一段代码,我将脚本放在ContentTemplate
UpdatePanel
区域中
<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函数的任何想法吗?
答案 0 :(得分:1)
您正在将错误结果硬编码到JavaScript if语句中。什么进入页面:
'<%= hf_needUpdate.Value %>' == 'true'
??
'false' == 'true'
??
这永远不会改变您需要获取隐藏字段的当前值。
var needUpdate = document.getElementById("needUpdate").value;
if(needUpdate == "true) {
// Do work
}