可是有時我們會需要透過 JavaScript 要求 UpdatePanel 做更新的動作,一般都會以為直接呼叫 __doPostBack 即可。以下以一個實例來做測試,我們在頁面的 UpdatePanel 放置一個 Label 來顯示最新時間。然後 Input (type=button) 在 onclick 直接呼叫 __doPostBack 函式。
*.aspx
1
<
asp:ScriptManager
ID
="ScriptManager1"
runat
="server"
/>
2
<
div
>
3
<
asp:UpdatePanel
ID
="UpdatePanel1"
runat
="server"
>
4
<
ContentTemplate
>
5
Server Time:
6
<
asp:Label
ID
="Label1"
runat
="server"
Text
="Label"
></
asp:Label
>
7
</
ContentTemplate
>
8
</
asp:UpdatePanel
>
9
<
input
id
="Button1"
type
="button"
value
="button"
onclick
="__doPostBack('','');"
/>
10
</
div
>
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
*.aspx.vb
1
Protected
Sub
Page_Load(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
Me
.Load
2 Label1.Text = Now.ToString()
3 End Sub
2 Label1.Text = Now.ToString()
3 End Sub
可是實際執行並不如預期,UpdatePanel 中的時間是更新了,可是頁面會產生閃爍的情形,這個 PostBack 並不會受 UpdatePanel 控管。
其實只要做一點修改就可以要求 UpdatePanel 做更新的動作,就是在 __doPostBack 函式的第一個引數 (eventTarget),如下範例傳入 UpdatePanel 的 ClientID 即可。實際執行的結果頁面就不會再閃爍了,因為 PostBack 動作已經在 UpdatePanel 的控管中。
<
input
id
="Button1"
type
="button"
value
="button"
onclick
="__doPostBack('UpdatePanel1','');"
/>
程式碼下載: UpdatePanelRefresh.rar