在一般的 PopupControlExtender 中要取得目前頁面元件回傳的值並不困難
詳細可以參考這篇文章
[KB]如果UpdatePanel有多個觸發來源,要怎麼將內容Post回去原觸發的控制項呢?
這邊列出重點程式碼
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles DropDownList1.SelectedIndexChanged Dim tmppce As AjaxControlToolkit.PopupControlExtender tmppce = AjaxControlToolkit.PopupControlExtender.GetProxyForCurrentPopup(Page) tmppce.Commit(DropDownList1.SelectedValue.ToString()) End Sub
可以發現回傳的值是寫在元件的事件觸發之中
可是如果我們是使用 UserControl 那該如何解決呢
很簡單,只要在 UserControl 中新增一個事件,並且於 UserControl 觸發該事件就可以了
感覺很像很複雜,其實不會,看程式或許會比較好了解一點
先建立一個 UserControl ,並且加入一個 TreeView 元件
<asp:TreeView ID="TreeView1" runat="server" BackColor="#66FFFF"> <Nodes> <asp:TreeNode Text="測試1" Value="111111"> <asp:TreeNode Text="測試1_1" Value="新節點"></asp:TreeNode> </asp:TreeNode> <asp:TreeNode Text="測試2" Value="222222222"></asp:TreeNode> <asp:TreeNode Text="測試3" Value="33333"></asp:TreeNode> </Nodes> </asp:TreeView>
然後在 UserControl 中新增一個事件,且設定 TreeView 的 SelectedNodeChanged 會觸發該新增的事件
Public Event UC_Event(ByVal srt As String) Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles TreeView1.SelectedNodeChanged RaiseEvent UC_Event(TreeView1.SelectedNode.Text) End Sub
接下來於主頁面中把該 UserControl 拉進來,然後新增程式於 UC_Event 事件中
Private Sub UC1_UC_Event(ByVal srt As String) Handles UC1.UC_Event Dim tmppce As AjaxControlToolkit.PopupControlExtender tmppce = AjaxControlToolkit.PopupControlExtender.GetProxyForCurrentPopup(Page) tmppce.Commit(srt) End Sub
這樣子我們就有一個可以在 PopupControlExtender 放入 UserControl ,而且也可以有回傳值了
經同事告知,不用這麼麻煩
只要在UserControl中元件的事件裡加入以下程就行了
Dim tmppce As AjaxControlToolkit.PopupControlExtender
tmppce = AjaxControlToolkit.PopupControlExtender.GetProxyForCurrentPopup(Page)
tmppce.Commit(DropDownList1.SelectedValue.ToString())