我有一些代碼包含一個面板,我從代碼隱藏中放置了一個ASP圖表。在面板下面,我放置了一個帶有回發事件的按鈕,該事件更改了該圖表的某些參數。添加UpdateProgress後UpdatePanel中斷
下面是代碼的簡化版本:
...
<asp:UpdatePanel ID="udp" runat="server">
<ContentTemplate>
<asp:Panel ID="pnl_chart" runat="server" />
<asp:Button ID="btn_chart" UseSubmitBehavior="false" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
...
而後面的代碼:
Private Property AltChart As Boolean
Get
If Me.ViewState("simulador_avanzado") Is Nothing Then
Return False
End If
Return ToBool(Me.ViewState("simulador_avanzado"))
End Get
Set(value As Boolean)
Me.ViewState("simulador_avanzado") = value
End Set
End Property
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
...
If IsPostBack AndAlso ToStr(Me.Request("__EVENTTARGET")).Contains("btn_chart") Then
AltChart = Not AltChart
End If
Dim cht as New Chart
'Build the chart...'
pnl_chart.Controls.Add(cht)
...
End Sub
這個工程就像一個魅力,但是當我添加的UpdateProgress回傳停止工作。每當我點擊這個按鈕時,UpdateProgress會顯示2-3秒(正是它做PostBack所需要的),但是它隱藏並且UpdatePanel內容不刷新。
這是新的代碼:
...
<asp:UpdatePanel ID="udp" runat="server">
<ContentTemplate>
<asp:Panel ID="pnl_chart" runat="server" />
<asp:Button ID="btn_chart" UseSubmitBehavior="false" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="udpro" AssociatedUpdatePanelID="udp" DynamicLayout="false" runat="server">
<ProgressTemplate>
<div class="udp_progress">
</div>
</ProgressTemplate>
</asp:UpdateProgress>
...
我調試的部分回發和後面的代碼是否按預期運行,它更新AltChart變量和圖表本身。
簡單來說:UpdatePanel部分回發完美地工作,但是當我添加綁定到它的UpdateProgress時,它的內容不會在部分回發中更新。
更新:,我發現了一個客戶端錯誤:
SCRIPT5022: Sys.InvalidOperationException: Could not find UpdatePanel with ID 'ctl00_Body_ctl02_udp_button'. If it is being updated dynamically then it must be inside another UpdatePanel.
顯然是由的UpdateProgress產生的JS被緩存。 UpdatePanel ID udp_button來自以前版本的代碼,它不再存在(我有UpdatePanel之外的按鈕,我用它自己的UpdatePanel封裝它以使UpdateProgress知道異步回發,在此之後example,現在我只是把它放在圖表的UpdatePanel中)。
清除瀏覽器緩存似乎不起作用(以及使用不同的瀏覽器)。
更新2:好了,我錯了。
udp_button是頁面上存在的另一個UpdatePanel,它在用戶控件中,我沒有注意到它。我將嘗試在UpdatePanel上放置一些條件UpdateMode,以查看是否可以阻止UpdateProgress更新錯誤的UpdatePanel。
你是否得到任何客戶端JavaScript錯誤? – mason
是的!我更新了問題 –
我解決了它!感謝您的提示! –