五月 08

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





二月 27

之前這篇文章有說怎麼在專案模式中對使用者控制項傳參數進去。

但是同樣的方法在網站模式就不適用了,要動一點小手腳,

這是因為網站模式的Class程式碼都放在App_Code中集中管理,

也就是說,如果你的Class是放在App_Code以外的地方,是讀不到的。

繼續閱讀… »