【问题标题】:How to append controls to a panel?如何将控件附加到面板?
【发布时间】:2012-10-04 12:40:58
【问题描述】:

我正在用 ASP.NET 开发一个动态网站。作为试验,我尝试了如下所示的代码,它为 Panel1 添加了一些控件。当用户第一次单击一个按钮时,控件被添加到面板中,但是当用户第二次单击同一个按钮时,以前的控件被替换为新的控件。但是我希望每次用户单击按钮时控件一个接一个地附加。代码是这样的:

Control c=Page.LoadControl("DData.ascx");
Panel1.Controls.Add(c);

我也试过了

Control c=Page.LoadControl("DData.ascx");
Panel1.Controls.AddAt(Panel1.Controls.Count,c);

但这取代了第一个输出。请告诉我如何附加这些控件?

【问题讨论】:

  • 在将控件添加到集合之前,您是否尝试为每个控件指定唯一名称(例如使用时间戳或基于 Panel1.Controls.Count 的 ID)?
  • 您的代码实际上是正确的。 Controls.Add 和 Controls.AddAt 都应该完成这项工作。我和阿德里亚诺一起做这个,你确定要向控件添加独特的对象/控件吗?
  • 这些控件的类型相同,但内容不同。就像 StackOverflow 上的 cmets 一样。

标签: c# asp.net user-controls append panel


【解决方案1】:

如您所料,这会附加一个控件:

Control c = Page.LoadControl("DData.ascx");
Panel1.Controls.Add(c);

您可以通过这种方式添加任意数量的控件。

但是,您需要以某种持久化/有状态方式(数据库、会话、ViewState 等)跟踪正在添加的控件。

您需要在每次页面加载时重建控件树

查看我对类似问题的回答:

【讨论】:

  • 你能告诉我一些关于 ViewState 的事情吗?我是 .NET 的新手
  • 当然。我在答案中添加了几个链接,包括 ViewState 上的一个。
【解决方案2】:

可能是关于asp.net页面的生命周期。每次页面加载时,它都会返回初始状态。按钮单击事件在页面加载后处理,您在页面上只有一个控件。请看Button to dynamically add controls everytime it's clicked

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2013-03-21
    • 2014-06-29
    相关资源
    最近更新 更多