以编程方式将用户控件添加到页面,同时保留已存在的控件

我试图在运行时将用户控件添加到div中。 我可以添加控件no probelem但它会覆盖之前添加的控件。

基本上,我正在尝试将乘客添加到旅行系统中 – 乘客的详细信息在用户控制之下,我事先并不知道会有多少乘客。 我有一个新的乘客按钮,它应该将新用户控件添加到div中,而不会覆盖前一位乘客。

代码是c#/。net 4。

我试图将控制数据保存到viewstate并重新添加新的,但这也不起作用。 这是我正在使用的代码片段

foreach (Control uc in p_passengers.Controls) { Passenger p = uc as Passenger; if (p != null) { p.SaveValues(); } } 

但是,p.SaveAs()(只是将控制值写入ViewState)永远不会被命中。

我确定它只是一些愚蠢但有任何想法?

干杯伙计们。

您是否为每次回发重新创建所有动态控件 ?

请记住,每个回发都是Page类的新实例,您需要显式重新创建以前创建的所有控件。

更新

如果你在viewstate中有一个已添加项目的列表,就像这样……

  private List Items { get { return ViewState["Items"] = (ViewState["Items"] ?? new List()); } } 

然后在您的点击处理程序中,您只需添加到此列表:

  private void btn_Click(object sender, EventArgs e) { this.Items.Add("Another Item"); } 

然后重写CreateChildControls

  protected overrides CreateChildControls() { foreach (string item in this.Items) { Passanger p = new Passenger(); p.Something = item; this.p_passengers.Controls.Add(p); } }