我正在尝试从ASP.NET代码更新全局javascript变量。我试图做的是使用像这样的UpdatePanel:
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<script type="text/javascript">
var global1= <%= this.Method(parameter) %>;
var global2= <%= this.Method(parameter) %>;
</script>
</ContentTemplate>
</asp:UpdatePanel>
UpdatePanel有一个触发器(代码中未显示)触发更新。我还有一个endRequest方法:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function EndRequest(sender, args) {
compute();
}
如果我使用像'Firebug'这样的软件来检查代码,我可以完全看到全局变量如何更新为他的新值(当发生异步后退时)。不幸的是,如果我在计算功能中显示一个显示其值的警报,则它们具有之前的值。
哪里出错?是否可以通过这种方式从ASP.NET更新变量?
非常感谢;)
答案 0 :(得分:3)
尝试这样做:将2个全局变量放在更新面板之外。然后,当UpdatePanel回发及其异步帖子时,从代码执行:
ScriptManager.RegisterClientScriptBlock(..);
在该声明中,请执行:
"global1 = '" + this.Method(parameter) + "';";
"global2 = '" + this.Method(parameter) + "';";
基本上,你要给变量写一个update语句。
HTH。
答案 1 :(得分:1)
你可以试试这个:
var global1= "\"" + <%= this.Method(parameter) %> + "\"";
或者可能这样:
var global = "'" + <%= this.Method(parameter) %> + "'";
我也不确定你是否需要将它放在更新面板中,除非还有其他事情我不会看到。
答案 2 :(得分:1)
我真的要感谢你参与这个主题。
我最终决定改变我最初的想法并使用PageMethods(ASP.NET)单独使用Javascript / Jquery执行操作:
http://msdn.microsoft.com/es-es/library/byxd99hx(v=vs.80).aspx http://stackoverflow.com/questions/563133/using-jquery-to-call-a-webmethod
我不太喜欢他们,因为我认为它们是一种“本地”解决方案,几乎没有重复使用的可能性。但它们会自动返回JSON响应,我可以使用$ .ajax jquery函数。
界面的感觉现在好多了。
再次感谢,