AspxCallbackPanel主要作用是對CallbackPanel內的內容進行非同步重新整理,實現此種效果的方法有很多,如Microsoft AJAX控制項中的UpdatePanel,比這種方式更為方便和好用.
下面這個例子就是通過一個ListBox,從用戶端回調AspxCallbackPanel,從而更新AspxCallbackPanel內的MultiView控制項顯示資訊。
首選,先在頁面中放置一個AspxCallbackPanel控制項,並設定ClientInstanceName屬性為“CallbackPanel”。
代碼如下:
Code
<dxcp:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel"
OnCallback="ASPxCallbackPanel_Callback" Width="100%">
</dxcp:ASPxCallbackPanel>
設定ASPxCallbackPanel的ClientInstanceName屬性,並註冊OnCallback伺服器事件.上一節已經說明,DevExpress的Aspx系統控制項的非同步更新方式都是一樣的,所以AspxCallbackPanel也同樣,註冊伺服器端的OnCallback事件,並從用戶端調用AspxCallbackPanel的 PerformCallback()方法.
接著看以下代碼,在AspxCallbackPanel中放置一個MultiView.注意,MulitView中放置在AspxCallbackPanle的<PanelCollection>子項目下的.
Code
<dxrp:PanelContent ID="PanelContent1" runat="server">
<dxcp:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel"
OnCallback="ASPxCallbackPanel_Callback" Width="100%">
<PanelCollection>
<dxp:PanelContent ID="PanelContent2" runat="server">
<asp:MultiView ID="MultiView" runat="server">
<asp:View ID="View1" runat="server">
<table>
<tr>
<td valign="top">
<dxe:ASPxLabel ID="ASPxLabel1" runat="server" Text="我是誰?不要告訴我是上班族,現在的上班族太民工;不要告訴我是民工,現在民工太缺錢;不要告訴我是富翁,富翁大都是暴發戶;不要告訴我是暴發戶,暴發戶都想當明星;不要告訴我是明星,現在明星就像上班族。"
Font-Bold="True">
</dxe:ASPxLabel>
</td>
</tr>
</table>
</asp:View>
<asp:View ID="View2" runat="server">
<table>
<tr>
<td valign="top">
<dxe:ASPxLabel ID="ASPxLabel3" runat="server" Text="許多人不知道自己失去過什麼,而時間總是耐心地給出答案。看著過去失去的東西,會有一種心痛的感覺!算是一種悔悟吧!"
Font-Bold="True">
</dxe:ASPxLabel>
</td>
</tr>
</table>
</asp:View>
<asp:View ID="View3" runat="server">
<table>
<tr>
<td valign="top">
<dxe:ASPxLabel ID="ASPxLabel5" runat="server" Text="一個人吻你,你一定被人深愛;不少人吻你,你一定是個漂亮的小孩;非常多的人吻你,你會被口水淹死"
Font-Bold="True">
</dxe:ASPxLabel>
</td>
</tr>
</table>
</asp:View>
</asp:MultiView>
</dxp:PanelContent>
</PanelCollection>
</dxcp:ASPxCallbackPanel>
</dxrp:PanelContent>
接下來就是調用AspxCallbackPanel的PerformCallback()方法了,這裡我們放置了一個ASPxListBox,並註冊ASPxListbox的 ClientSideEvents事件中的 SelectedIndexChanged事件,如下:
Code
<dxe:ASPxListBox ID="ASPxListBox1" runat="server" ClientInstanceName="ListBox" Height="83px">
<Items>
<dxe:ListEditItem Text="雷語1" Value="0" />
<dxe:ListEditItem Text="雷語2" Value="1" />
<dxe:ListEditItem Text="雷語3" Value="2" />
</Items>
<ClientSideEvents SelectedIndexChanged="function(s, e) {
var item = ListBox.GetSelectedItem();
CallbackPanel.PerformCallback(item.value); <!--此行就是調用AspxCallbackPanel的回調方法 -->
}" Init="function(s, e) {
ListBox.SetSelectedIndex(0);
CallbackPanel.PerformCallback(0);
}"
/>
</dxe:ASPxListBox>
當從客戶調用CallbackPanel.PerformCallback(value)的方法時,它會調用在伺服器端的OnCallback事件.
protected void ASPxCallbackPanel_Callback(object source, CallbackEventArgsBase e)
{
MultiView.ActiveViewIndex = Convert.ToInt32(e.Parameter); //啟用顯示的ViewID
}
總結:
1 向頁面添加ASPxCallbackPanel組件,並設定ClientInstanceName屬性(用戶端標識,如 ClientInstanceName="CallbackPanel")。
2 註冊ASPxCallbackPanel組件的伺服器端事件ASPxCallback_Callback。
3 在用戶端使用者CallBack組件的用戶端方法PerformCallback方法,以調用伺服器端的ASPxCallbackPanel_Callback事件。
代碼:CallbackPanel.PerformCallback(id)
結論:
通過ASPxCallbackpanel與上一節的AspxCallBack的使用,我們發現DevExpress Aspx控制項的回調方法都是一致的。
即添加ClientInstanceName
註冊伺服器端的Callback事件
調用ClientInstanceName.PerformCallback方法以執行伺服器端的Callback中的代碼
最後調用CallbackComplete事件,進行必要的處理(可選)
個人觀點:
ASPxCallbackPanel和AspxCallBack雖然提供了很多的機制來完成AJAx的操作,但從控制項易用性上來講,ASPxCallbackPanel並不如UpdataPanel如用。
但通過ASPxCallbackPanel和CallBack組件的回調學習,使我們知道了ASPx系列操作的回調機制與流程,對於學習和瞭解其他ASPx控制項來說還是有很大的協助的。