在UpdatePanel回发后无法获取服务器端var值
问题描述:
我有一个带有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无法获得这个新的价值。它总是获得第一次的价值。
如何解决此问题?
答
当您从updatePanel执行回传时,只有该updatePanel内的项目才会被刷新。如果您的javascript不在该updatePanel中,它将不会获得新值,它始终只具有原始页面GET的值。
要解决此问题,您需要在更新面板中获取“myRate”,以便在面板的每个回传后刷新它。要么在面板内移动您的JavaScript,要么在updatePanel中放置一个隐藏控件,并让您的JavaScript读取该隐藏控件的值,如下所示:<asp:HiddenField ID="myRate" runat="server" Value="?" />
谢谢。如何在UpdatePanel中移动javescript函数? 像下面这样? 的 // ... ContentTemplate> asp:UpdatePanel> –
KentZhou
2010-06-22 16:51:01
使用HiddenField的想法为我工作。我尝试了一切,继续阅读我的服务器端属性暴露无济于事:JS内的UpdatePanel本身,把JS放在另一个UpdatePanel和调用。更新它,虚无。。。我不得不使用建议的HF方法。 – atconway 2012-03-12 18:04:21