我一直在寻找这一点,但似乎无法得到一个体面的答案。我正在使用手风琴并动态添加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" />
<asp:CheckBox ID="chkDebug" runat="server" EnableTheming="False" Text="Run in Debug mode" />
</p>
</ContentTemplate>
</asp:UpdatePanel>
任何想法我做错了 - 任何指针都非常感激。单击按钮时,它只会导致回发并刷新丢失动态创建的手风琴窗格。
答案 0 :(得分:0)
我也遇到了类似的问题,经过多次沮丧之后,唯一的解决方案是没有解决方案。
当您动态创建控件时,无论是否为手风琴,控件都会被创建并发送到客户端,根据客户端的浏览器进行呈现。
* 回发后,根据您在页面加载事件中添加的内容,无法在服务器上重新呈现控件。 *
这是我在尝试将文本框动态添加到Gridview时所学到的,它可以增加列数:预先添加大量列,可见性为false,然后取消隐藏我需要的数字。
如果有人在那里有更好的解决方案,那我就是游戏吧!