2010-06-22 67 views
1

我有一個帶有UpdatePanel的aspx頁面。在代碼隱藏中,我定義了一個公共變量和函數。該函數使用輸入日期來計算數據庫中的公共var。在UpdatePanel回發後無法獲取服務器端var值

Public myRate As Decimal 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  
CalcT.Attributes.Add("onchange", "cstgst();") 
    '...... 
    GetTaxRates() 
End Sub 

Public Function GetTaxRates() As Boolean 
     //this function get user input date to calc the data from database 
     Dim mydate As DateTime = UI.GetDate(DateInput.Text) //UI.GetDate is a function to convert string to datetime 
     '.... 
End Function 

在aspx頁面,我設置TextBox,如:(的AutoPostBack,裏面的UpdatePanel)

<asp:UpdatePanel> 
<asp:TextBox ID="DateInput" runat="server" AutoPostBack="true" ></asp:TextBox> 
</asp:UpdatePanel> 

然後我嘗試在JavaScript想獲得myRate:

function Test(){ 
    var rate = '<%=myRate%>' 
    //.... 
} 

,第一時間要加載此頁面,我可以爲myRate獲取正確的值。 但是,當我用新的日期值修改DateInput時,回調被觸發並且調用GetTaxRates()函數並在調試代碼和檢查值時在myRate中設置了正確的值。問題是JavaScript無法獲得這個新的價值。它總是獲得第一次的價值。

如何解決此問題?

回答

1

當您從updatePanel執行回傳時,只有該updatePanel內的項目纔會被刷新。如果您的javascript不在該updatePanel中,它將不會獲得新值,它始終只具有原始頁面GET的值。

要解決此問題,您需要在更新面板中獲取「myRate」,以便在面板的每個回傳後刷新它。要麼在面板內移動您的JavaScript,要麼在updatePanel中放置一個隱藏控件,並讓您的JavaScript讀取該隱藏控件的值,如下所示:<asp:HiddenField ID="myRate" runat="server" Value="?" />

+0

謝謝。如何在UpdatePanel中移動javescript函數? 像下面這樣? 的 <的ContentTemplate> <腳本類型= 「文本/ JavaScript的」> // ... KentZhou 2010-06-22 16:51:01

+0

使用HiddenField的想法爲我工作。我嘗試了一切,繼續閱讀我的服務器端屬性暴露無濟於事:JS內的UpdatePanel本身,把JS放在另一個UpdatePanel和調用。更新它,虛無。。。我不得不使用建議的HF方法。 – atconway 2012-03-12 18:04:21