2011-08-26 79 views
2

我試圖從ASP.NET代碼更新全局JavaScript變量。我一直試圖做的是使用這樣一個UpdatePanel:從UpdatePanel更新JavaScript變量

<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(); 
} 

如果我使用的軟件,如「螢火蟲」來檢查代碼,我可以看到perfecly變量是如何全球更新爲他的新值(當asyncpostback發生)。不幸的是,如果我在計算函數中放置了一個顯示其值的警報,它們就具有以前的值

哪裏出錯?是否有可能從ASP.NET更新這種方式的變量?

非常感謝;)

回答

1

我真的很感謝你參與這個主題。

我終於決定改變我最初的想法和只使用Javascript/jQuery的與PageMethods執行的操作(ASP.NET):

http://msdn.microsoft.com/es-es/library/byxd99hx(v=vs.80).aspx http://stackoverflow.com/questions/563133/using -jquery-to-call-a-webmethod

我不喜歡他們這麼多,因爲我認爲他們是一個「本地」解決方案,幾乎沒有可能重複使用beign。但他們會自動返回JSON響應,我可以使用$ .ajax jquery函數。

現在接口的感覺更好。

再次感謝,

3

試着這樣做:把2個全局變量更新面板之外。然後,當UpdatePanel的回發和異步後,從代碼做到:

ScriptManager.RegisterClientScriptBlock(..); 

在該聲明中,這樣做:

"global1 = '" + this.Method(parameter) + "';"; 
"global2 = '" + this.Method(parameter) + "';"; 

所以基本上,你寫了一個更新語句的變量。

HTH。

1

你可以試一下這個:

var global1= "\"" + <%= this.Method(parameter) %> + "\""; 

或者可能是這樣的:

var global = "'" + <%= this.Method(parameter) %> + "'"; 

我也不清楚,你需要把它的更新面板,除非有別的事情在那我沒有看到。