在UpdatePanel中回发后无法获取服务器端var值

时间:2010-06-22 15:43:22

标签: asp.net-ajax

我有一个带有UpdatePanel的aspx页面。在代码隐藏中,我定义了一个公共var和函数。该函数使用输入日期从数据库计算公共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设置为:(AutoPaostBack,在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 个答案:

答案 0 :(得分:1)

当您从updatePanel进行回发后,只会更新该updatePanel中的项目。如果您的javascript在该updatePanel之外,它将不会获得新值,它将始终只具有原始页面GET中的值。

要解决此问题,您需要在更新面板中获取“myRate”,以便在面板的每个回发中刷新它。在面板中移动你的javascript,或者在updatePanel中放一个隐藏的控件,让你的javascript读取隐藏控件的值,如下所示:<asp:HiddenField ID="myRate" runat="server" Value="?" />