努力以编程方式添加用户控件

时间:2009-02-25 12:07:50

标签: c# asp.net user-controls

我遇到问题Programmatically added User Control does not create its child controls中的问题。

在阅读问题和答案后,我改变了我的代码,现在看起来像这样:

foreach (ITask task in tasks)
{
    TaskListItem taskListItem = LoadControl(
        typeof(TaskListItem),
        new object[] {task}
    ) as TaskListItem;

    taskListItem.TaskCompleteChanged += taskListItem_TaskCompleteChanged;                        

    taskListItemHolder.Controls.Add(taskListItem);
}

但是,我仍然得到一个用户控件,其子控件尚未实例化。

知道我做错了吗?

提前致谢

2 个答案:

答案 0 :(得分:3)

你可能想要改用它:

foreach (ITask task in tasks)
{
  TaskListItem taskListItem = LoadControl("~/TaskListItem.ascx") as TaskListItem;

  taskListItem.Task = task;
  taskListItem.TaskCompleteChanged +=
      taskListItem_TaskCompleteChanged;                        

  taskListItemHolder.Controls.Add(taskListItem);
}

这是因为TaskListItem不是实际控件的类型,而是控件的代码隐藏类的类型。检查this page in MSDN(在社区内容的底部)。

答案 1 :(得分:1)

确保您在CreateChildControls方法中添加控件(您可以覆盖它),同时为控件提供一个ID(每次添加时都需要相同)。