我的网站上有以下代码:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="myButton_btn" eventname="Click" />
</Triggers>
<ContentTemplate>
<script>
function pageLoad(){
window.alert("<%=Session("myVariable")%>");
}
}
</script>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="myButton_btn" Text="Prev Month" runat="server"></asp:Button>
每次单击按钮时都会运行javascript。但是,即使我的子例程在单击按钮后更新了会话变量,我也总是得到相同的警报。换句话说,在回发后运行相同的javascript,并且它不会更新。我很肯定会话变量IS正在改变。有谁知道为什么会这样?感谢您的投入!
非常感谢你!
答案 0 :(得分:5)
在按钮处理程序中尝试此操作:
VB.Net
ScriptManager.RegisterStartupScript(Me.UpdatePanel, GetType(string), "alertScript", String.Format("alert('{0}');",Session("myVariable")), true)
C#
ScriptManager.RegisterStartupScript(this.UpdatePanel, typeof(string), "alertScript", string.Format("alert('{0}');", Session["myVariable"]), true);
答案 1 :(得分:0)
我确信有更好的方法可以做到这一点,但我在处理更新面板中返回的javascript的黑客涉及注册一个函数,该函数在任何已更新的UpdatePanel中查找新的javascript,然后eval()的内容。这是一个粗略的例子:
的Site.Master:
<script type="text/javascript">
PageLoadedHandler = function(sender, args) {
var panels = args.get_panelsUpdated();
for (var i = 0; i < panels.length; i++) {
var scripts = panels[i].getElementsByTagName('script');
for (var j = 0; j < scripts.length; j++) {
eval(scripts[j].innerHTML);
}
}
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
</script>
如果有人有,我绝对愿意接受更清洁的解决方案。