好的,我有一个非常奇怪的问题。我有一个常规的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!?
答案 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)
后者导致完全相同的事情发生。我认为他们都会做同样的事情,但显然不是。