3

我有一个自定义控件,它工作正常……除了控件不能在设计时呈现。(我正在使用 VS 2008)

我想很多开发自定义控件的人都会遇到这个问题......我得到的错误是“创建控件时出错 - CustomControlName”对象引用未设置为对象的实例。

我想要一个解决方法。或者至少调试这个......(因为这是一个设计时问题如何调试?)

我已经在 OnInit、OnPreRender、RenderContents、CreateChildControls 方法上尝试了 if(!DesignMode) 代码(我只是在黑暗中拍摄)......

请帮忙。我真的希望这不是 VS 错误!

4

4 回答 4

1

BFree 的评论是最有可能出现的问题,对于要在设计视图中显示的控件,它需要一个无参数的构造函数,因为设计查看器不知道您通常如何实例化控件。

如果你确实有一个无参数的构造函数,你能粘贴一些代码来显示发生了什么吗?

于 2008-12-19T05:48:28.157 回答
0

在您的OnPreRender&CreateChildControls方法中,它正在调用 this.Page。您可能想尝试将它们包装在

if (this.Page != null)
{
.....
}

因为我认为那时您不会有 Page 对象,而且我确定PreRenderCreateChildControls并且会在设计视图中被调用。不过,我已经有一段时间没有编写自定义服务器控件了,所以我可能是错的(最近一直在 MVC 中工作)。

于 2008-12-24T00:46:31.223 回答
0

正如 Glenn 所说,第一个问题可能是没有无参数的构造函数。

第二个可能是您在 OnLoad 期间调用方法或您提到的其他方法,这些方法具有未初始化的参数或通常在运行时完成的某种数据库调用尝试等。

除非他们最近修复了这个错误*并且我不知道,否则要记住的是 DesignMode 属性适用于嵌套控件的第一级和第二级,但除此之外它通常不能正常工作。(例如包含包含另一个 UserControl[2] 的 UserControl[1] 的表单,DesignMode 对表单和 [1] 起作用,但对 [2] 不起作用)。

也同意 Glenn 的观点,查看一些代码会有所帮助。

*根据我最近使用嵌套用户控件的经验,它尚未修复。

于 2008-12-19T06:28:10.887 回答
0

格伦,你得到了一个 VS 错误并且尚未发布任何修复程序的错误。

于 2009-06-30T12:46:34.040 回答