在一般的 PopupControlExtender 中要取得目前頁面元件回傳的值並不困難
詳細可以參考這篇文章
[KB]如果UpdatePanel有多個觸發來源,要怎麼將內容Post回去原觸發的控制項呢?
這邊列出重點程式碼
1 2 3 4 5 6 | 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 元件
1 2 3 4 5 6 7 8 9 | < 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 會觸發該新增的事件
1 2 3 4 5 6 | 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 事件中
1 2 3 4 5 | 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())