以编程方式添加控件时未实例化占位符
Posted
技术标签:
【中文标题】以编程方式添加控件时未实例化占位符【英文标题】:Placeholders Not Instantiated when adding Controls Programmatically 【发布时间】:2010-11-09 10:32:10 【问题描述】:我有一个声明了占位符控件的 ASPX 页面。
在代码隐藏中,我创建了一个用户控件并将其添加到占位符中。
protected void Page_Load(object sender, EventArgs e)
UserControl uc = new ChartUserControl();
myForm.Controls.Add(uc);
UserControl 反过来有一个占位符,但在 Page_Load(对于 UserControl)我这样做时:
protected void Page_Load(object sender, EventArgs e)
WebControl x = new WebControl();
userControlPlaceholder.Controls.Add(x);
它给了我无处不在的“对象引用未设置为对象的实例”异常。
我尝试通过调用构造函数来强制实例化,但这给我带来了其他麻烦。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:我自己只花了 4 个小时。
问题是您正在创建用户控件
ChartUserControl chart = new ChartUserControl();
但你必须使用 LoadControl:
ChartUserControl chart =
(ChartUserControl)LoadControl("~/path/to/control/ChartUserControl.ascx");
显然,LoadControl 初始化了用户控件,以便它的 PlaceHolders(我假设它包含的其他控件)在您使用它们时不会为空。
【讨论】:
谢谢谢谢谢谢 - 这也让我摆脱了一大堆嘟嘟声。 太棒了!我认为我将不得不重新考虑我对这个项目的整个方法。 除了LoadControl()
还有其他实现来实例化UserControl吗?【参考方案2】:
不要在 Page_Load 中添加控件,而是重写 CreateChildControls 方法并将其添加到那里。
【讨论】:
感谢您的提示,很有意义。虽然遇到了完全相同的问题(我把它放在 base.CreateChildControls(); 之后)。以上是关于以编程方式添加控件时未实例化占位符的主要内容,如果未能解决你的问题,请参考以下文章
MonoTouch 以编程方式为 ContainerView 实例化 ViewController
以编程方式(但不是以声明方式)实例化小部件时出现 Dojo 重复 ID 错误
'故事板“ Main”中的标识符为“”的实例化视图控制器,但尝试以模态方式显示视图控制器时未获得UITableView']