在 AJAX 取得 PopupControlExtender 回傳的值 with UserControl

在一般的 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 ,而且也可以有回傳值了

One thought on “在 AJAX 取得 PopupControlExtender 回傳的值 with UserControl

  1. 經同事告知,不用這麼麻煩
    只要在UserControl中元件的事件裡加入以下程就行了

    Dim tmppce As AjaxControlToolkit.PopupControlExtender
    tmppce = AjaxControlToolkit.PopupControlExtender.GetProxyForCurrentPopup(Page)
    tmppce.Commit(DropDownList1.SelectedValue.ToString())

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *