【问题标题】:Dynamically adding control to master page动态添加控制到母版页
【发布时间】:2009-11-29 10:14:02
【问题描述】:

我在将控件动态加载到母版页的 ContentPlaceHolder 时遇到问题。

从 db 加载 ContentPlaceHolder 的名称和 UserControl 的路径并发送到这个小代码:

控制 c = this.Page.LoadControl(uc-path-from-db);
this.Page.Master.FindControl(cph-name-from-db).Controls.Add(c);

当我运行它时,我得到了这个错误:

无法修改 Controls 集合,因为该控件包含代码块(即 )。

我做错了什么?

【问题讨论】:

  • 母版页的 元素中是否有任何代码块 ()?
  • 没有任何标记。当我用谷歌搜索这个问题时,我跑到帖子上说要在 head 元素中查找代码块,但我没有。

标签: c# asp.net


【解决方案1】:

如果没有你的标记,它并不完全清楚,但它告诉你不能在那里添加控件,因为你的一些标记包含一个 块,它告诉 ASP.NET 执行任何在那里创建你的标记。尝试删除您的 块,它应该可以让您添加控件。或发布您的标记以获得更完整的答案。

【讨论】:

  • 有趣的是,我没有任何标记。我刚刚添加了控件,编译了项目,运行了项目,预计 UserControl 将在没有任何数据的情况下添加并得到该错误。我对错误消息感到非常困惑。
  • 那么您的母版页、页面或用户控件中没有代码块?
  • 不知道怎么回答。我在页面中看到了代码块,但这似乎不会干扰控件的加载,因为加载与该代码块一起工作,我不太确定我做了什么,因为我做了很多事情试图让它工作。谢谢。
【解决方案2】:

根据您正在使用的 Web 项目的类型,您必须确保在您正在加载它的 MasterPage 和您从中加载它的页面上 您的 UserControl .如果您使用的是 web site 而不是 web application,它会将每个页面编译到它的小程序集中,并且不会引用 usercontrol 的程序集,除非它看到该 Reference标记中的标记。

我不是 100% 相信这一点,但值得一看。

【讨论】:

  • 我正在使用 Web 应用程序,我从 BaseClass 调用该代码。我试图从默认页面的 page_load 调用它并加载它,但即使我在控件中放置了一些文本,也没有任何数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多