我想创建一个动态表单,用户可以在其中单击按钮。 单击该按钮时,它将触发部分回发并将新控件添加到占位符中。
我的问题是,当第一次单击该按钮时,它能够在占位符中创建一个新控件。但即使我点击按钮几次,它也不会创造更多。
<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());
}
答案 0 :(得分:1)
除非在preinit或init阶段添加动态添加的控件,否则它不会超过回发。因此,当第二次单击该按钮时,第一个添加的控件将丢失,然后按钮逻辑再次添加一个控件,每次只剩下一个控件。对于在init阶段之后添加的控件,您需要存储其状态并在每个回发时重新创建它。本文对此进行了描述:
http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i
您也可以在不使用动态添加控件的情况下实现目标。一种可能的方法是使用ListView控件,将FileUpload控件添加到其ItemTemplate,并在每次单击按钮时将新记录添加到列表视图数据源。