是什么原因导致标记控件为空?

时间:2010-05-03 23:20:05

标签: asp.net debugging user-controls page-lifecycle

好的,我有一个非常奇怪的问题。我有一个常规的UserControl,在标记中有一些控件。在Page_Load,这些控件仍为null。我尝试过EnsureChildControls

它的布局如下:

主页 - >页面 - > mycontrol1 - > mycontrol2 - > problemcontrol

ProblemControl是控件为null的位置。 MyControl1包含MyControl2。 MyControl2是另一个UserControl,其中包含ProblemControl的标记。 Masterpage没有什么特别之处,Page包含MyControl1的标记。唯一奇怪的是,ProblemControl是在Page_Init动态创建的。

一切正常,直到我到达没有创建任何控件的ProblemControl。 ProblemControl具有所有设置的正确内容,例如Page和Parent属性。我没有看到任何问题。所有这些(CodeControl除外)的源代码非常广泛,所以我希望有人可以给我一些针对这个问题的故障排除技巧,如果有人以前遇到过它。

另外,我可以将ProblemControl放在另一个Page控件上,它可以正常工作,这是关于mycontrol1和/或mycontrol2的。但我们从来没有遇到mycontrol1的问题,mycontrol2没有任何我可以看到的错误。 (在过去的几个小时里,我一直在进行繁琐的分析)。

还有其他人有同样的问题吗?有任何常见的事情需要检查吗?

更新

好的,我将在不久的将来有一个小测试用例,以便重现它。但就目前而言,似乎在Page_Init动态地从UserControl内部创建UserControl是导致问题的原因。我可以在ASPX页面上执行相同的代码,但是当我在ASCX控件上执行它时,如上所述,它会中断所有的null问题。你能不能嵌套UserControls!?

2 个答案:

答案 0 :(得分:0)

最后的手段调试技术:二进制搜索bug。

步骤1:创建一个空白控件BlankControl1。取代MyControl1。添加MyControl2到它。它有用吗?如果是这样,问题出在MyControl2中(进度!)。否则,问题至少部分涉及MyControl1。我会假设情况就是这样。

步骤2:从MyControl1中删除尽可能多的代码,留下包含MyControl2的代码。继续修改它,直到问题消失或变成BlankControl1。在后一种情况下,有些东西很奇怪,你需要打开一个文件比较实用程序来找出差异隐藏的位置。

第3步:您现在知道如何解决问题。这导致了解决方案,或者这导致了如何在不破坏ProblemControl的情况下使用引发问题的代码的问题。无论哪种方式,你都更接近解决方案。

答案 1 :(得分:0)

好的,我已经找到了答案:ASP.NET Custom user control to add dynamically(请投票结束重复

接受的答案是对我有用的。最重要的是使用Page.LoadControl("path..")而不是Page.LoadControl(typeof(mycontrol),null)后者导致完全相同的事情发生。我认为他们都会做同样的事情,但显然不是。