2010-05-03 25 views
0

好吧,我有一个很奇怪的问题。我有一个普通的UserControl,在标记中有一些控件。在Page_Load这些控件仍然是null。我试图EnsureChildControls是什么导致标记控件为空?

它奠定了这样的:

母版 - >首页 - > mycontrol1 - > mycontrol2 - > problemcontrol

ProblemControl是在控制为空。 MyControl1包含MyControl2。 MyControl2是另一个UserControl,它包含标记中的ProblemControl。主页没什么特别,页面包含MyControl1的标记。唯一奇怪的是ProblemControl是在Page_Init上动态创建的。

一切工作正常,直到我得到ProblemControl没有任何控件正在创建。 ProblemControl拥有所有的设置,比如Page和Parent属性。我没有看到任何问题。所有这些(除了ProblemControl)的源代码都非常广泛,所以我希望有人可以给我一些这个问题的疑难解答提示,如果有人遇到过。

此外,我可以将ProblemControl放置在另一个页面控件上,它可以很好地工作,它与mycontrol1和/或mycontrol2有关。但是我们从来没有遇到任何与mycontrol1有关的问题,mycontrol2也没有任何我可以看到的错误。 (过去几个小时我一直在进行繁琐的分析)。

有没有其他人有这个相同的问题?是否有任何常见的事情需要检查?

更新:

好吧,我会在不久的将来,一个小的测试情况与此一起去复制它。但就目前而言,似乎在Page_Init处动态地从UserControl内部创建UserControl是导致此问题的原因。我可以在ASPX页面上执行相同的代码,但是当我在ASCX控件上执行该代码时,如上所述,它会中断一切为空的问题。你不能嵌套UserControls!?

+0

可能的重复http://stackoverflow.com/questions/2275625/asp-net-custom-user-control-to-add-dynamically – Earlz 2010-05-04 15:42:46

回答

0

好吧,我发现了答案:ASP.NET Custom user control to add dynamically(请投票接近重复

接受的答案没有对我工作最重要的就是用Page.LoadControl("path..")而非Page.LoadControl(typeof(mycontrol),null)后来引起同样的事情发生,我想他们都会做同样的事情,但显然不是。

0

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

第1步:创建一个空白控件BlankControl1。代替MyControl1。将MyControl2添加到它。它工作吗?如果是这样,问题出在MyControl2(进度!)。否则,问题至少部分与MyControl1有关。我会认为是这样。

第2步:从MyControl1中删除尽可能多的代码,留下包含MyControl2的代码。不断修改它,直到问题消失或变为BlankControl1。在后一种情况下,有些东西很奇怪,你会想打开一个文件比较工具来找出差异隐藏的地方。

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

+0

aw :(我不喜欢这种类型的调试..但我猜我会拥有明天在工作上做... – Earlz 2010-05-04 02:32:33