以编程方式将用户控件添加到页面,同时保留已存在的控件
我试图在运行时将用户控件添加到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); } }