我创建了一个内部使用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,如果它放在外面,通常只在页面上,它就可以工作。
有没有人知道这里可能出现什么问题?
答案 0 :(得分:9)
我见过this.Page
在嵌套用户控件中返回null的情况。
在这种情况下,使用构造(Page)HttpContext.Current.Handler
来使页面对象正常工作。
答案 1 :(得分:1)
我不知道它是否有任何用处,但也许还有一些用处...
当您实例化模板(使用InstantiateIn
)时,生成的控件层次结构是否实际添加到MyControl的Controls
集合中? AFAIK,这是确保您拥有非null页面属性的方法。