从模板化控件中调用ASP.net Page对象时为null

时间:2009-06-22 11:28:29

标签: c# asp.net templates servercontrols

我创建了一个内部使用ITemplate的控件,以允许用户添加自己的东西。

<my:MyControl id="myControl" runat="server">
   <Content>
         //some stuff in here
   </Content>
</my:MyControl>

“Content”属性是模板。 (这只是简化。这个结构在一个更大的控件内。)

现在我遇到的问题是我的用户将自己的UserControl放在<Content>..</Content>中。这应该不是问题,但UserControl在PageLoad事件中调用页面的QueryString。现在我认识到当UserControl驻留在模板中时,Page对象为null,如果它放在外面,通常只在页面上,它就可以工作。

有没有人知道这里可能出现什么问题?

2 个答案:

答案 0 :(得分:9)

我见过this.Page在嵌套用户控件中返回null的情况。

在这种情况下,使用构造(Page)HttpContext.Current.Handler来使页面对象正常工作。

答案 1 :(得分:1)

我不知道它是否有任何用处,但也许还有一些用处...

当您实例化模板(使用InstantiateIn)时,生成的控件层次结构是否实际添加到MyControl的Controls集合中? AFAIK,这是确保您拥有非null页面属性的方法。