从UpdatePanel更新JavaScript变量

时间:2011-08-26 12:22:18

标签: javascript jquery asp.net asp.net-ajax

我正在尝试从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更新变量?

非常感谢;)

3 个答案:

答案 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函数。

界面的感觉现在好多了。

再次感谢,