0

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

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

<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());

    }
4

1 回答 1

1

除非在 preinit 或 init 阶段添加动态添加的控件,否则它不会在回发之后持续存在。因此,当第二次单击按钮时,第一次添加的控件丢失,然后按钮逻辑再次添加控件,每次都留下一个控件。对于在 init 阶段之后添加的控件,您需要存储其状态并在每次回发时重新创建它。这在本文中有所描述:

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

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

于 2013-09-01T15:45:48.147 回答