ASP.Net动态地向AJAX Accordion Pane添加按钮和事件

时间:2013-12-05 15:16:36

标签: c# asp.net asp.net-ajax ajaxcontroltoolkit

我一直在寻找这一点,但似乎无法得到一个体面的答案。我正在使用手风琴并动态添加Panes和网格。我还想在每个面板添加到手风琴时添加一个文本框和一个按钮。

//add a comments box and a submit button to the container
            Button btnComments = new Button();
            btnComments.ID = CheckName + "btnComment" + i;
            btnComments.CommandName = "SubmitComment";
            TextBox txtComments = new TextBox();
            txtComments.ID = CheckName + "txtComment" + i;
            pane.ContentContainer.Controls.Add(new LiteralControl("<br />"));
            pane.ContentContainer.Controls.Add(txtComments);
            pane.ContentContainer.Controls.Add(new LiteralControl("<br />"));
            pane.ContentContainer.Controls.Add(btnComments);

文本框和按钮按预期显示在手风琴中,但事件不会触发。我一直在读这个事件需要在Page_Load中添加,但此时按钮不存在。

我尝试将CommandEvent添加到手风琴中,然后我可以捕获发送者但是再次没有触发

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Panel ID="Panel1" runat="server" />
        <asp:Accordion ID="Accordion1" runat="server" AutoSize="None" 
            RequireOpenedPane="False" SelectedIndex="-1" FadeTransitions="false"  OnItemCommand="Linked_ItemCommand">
        </asp:Accordion>
        <br />
        <p>
            <asp:Button ID="btnRunChecks" runat="server" OnClick="RunChecks" Text="Run Checks" />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:CheckBox ID="chkDebug" runat="server" EnableTheming="False" Text="Run in Debug mode" />
        </p>
    </ContentTemplate>
</asp:UpdatePanel>

任何想法我做错了 - 任何指针都非常感激。单击按钮时,它只会导致回发并刷新丢失动态创建的手风琴窗格。

1 个答案:

答案 0 :(得分:0)

我也遇到了类似的问题,经过多次沮丧之后,唯一的解决方案是没有解决方案。

当您动态创建控件时,无论是否为手风琴,控件都会被创建并发送到客户端,根据客户端的浏览器进行呈现。

* 回发后,根据您在页面加载事件中添加的内容,无法在服务器上重新呈现控件。 *

这是我在尝试将文本框动态添加到Gridview时所学到的,它可以增加列数:预先添加大量列,可见性为false,然后取消隐藏我需要的数字。

如果有人在那里有更好的解决方案,那我就是游戏吧!