部分回发期间无法在Panel / Placeholder中不断添加新控件

时间:2013-09-01 15:11:16

标签: c# asp.net

我想创建一个动态表单,用户可以在其中单击按钮。 单击该按钮时,它将触发部分回发并将新控件添加到占位符中。

我的问题是,当第一次单击该按钮时,它能够在占位符中创建一个新控件。但即使我点击按钮几次,它也不会创造更多。

<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Button ID="Button1" runat="server" Text="Add images" OnClick="Button1_Click" />
                <asp:HiddenField ID="HiddenField1" runat="server" Value="1" />
                <br />
                <asp:Panel ID="PlaceHolder1" runat="server">
                    <asp:FileUpload ID="FileUpload1" runat="server" />
                </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>

代码背后:

protected void Button1_Click(object sender, EventArgs e)
    {

        PlaceHolder1.Controls.Add(new FileUpload());

    }

1 个答案:

答案 0 :(得分:1)

除非在preinit或init阶段添加动态添加的控件,否则它不会超过回发。因此,当第二次单击该按钮时,第一个添加的控件将丢失,然后按钮逻辑再次添加一个控件,每次只剩下一个控件。对于在init阶段之后添加的控件,您需要存储其状态并在每个回发时重新创建它。本文对此进行了描述:

http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i

您也可以在不使用动态添加控件的情况下实现目标。一种可能的方法是使用ListView控件,将FileUpload控件添加到其ItemTemplate,并在每次单击按钮时将新记录添加到列表视图数据源。