我有一个带有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无法获得这个新值。它总是获得第一次价值。
如何重新解决这个问题?
答案 0 :(得分:1)
当您从updatePanel进行回发后,只会更新该updatePanel中的项目。如果您的javascript在该updatePanel之外,它将不会获得新值,它将始终只具有原始页面GET中的值。
要解决此问题,您需要在更新面板中获取“myRate”,以便在面板的每个回发中刷新它。在面板中移动你的javascript,或者在updatePanel中放一个隐藏的控件,让你的javascript读取隐藏控件的值,如下所示:<asp:HiddenField ID="myRate" runat="server" Value="?" />