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

时间:2011-03-25 15:24:54

标签: c# asp.net user-controls runtime

我试图在运行时将用户控件添加到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)永远不会被命中。

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

干杯。

1 个答案:

答案 0 :(得分:3)

你是re-creating all of your dynamic controls for every postback吗?

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

<强>更新

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

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

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

   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);
       }
  }
相关问题