Asp.net 嵌套用户控件可以';无法访问呈现中的页面上下文

Asp.net 嵌套用户控件可以';无法访问呈现中的页面上下文,asp.net,vb.net,user-controls,custom-controls,Asp.net,Vb.net,User Controls,Custom Controls,这个问题似乎与我们有关,但我不认为它是重复的 我有许多用户控件需要在其呈现事件期间访问页面变量。当我将控件放在.aspx页面上时,这可以正常工作。但是,当我尝试这样嵌套控件时: Protected Overrides Sub Render(ByVal writer As HtmlTextWriter) Dim nestedControl = New CustomControl() helpIcon.RenderControl(writer) MyBase.Render

这个问题似乎与我们有关,但我不认为它是重复的

我有许多用户控件需要在其
呈现
事件期间访问
页面
变量。当我将控件放在.aspx页面上时,这可以正常工作。但是,当我尝试这样嵌套控件时:

Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
    Dim nestedControl = New CustomControl()

    helpIcon.RenderControl(writer)

    MyBase.Render(writer)
End Sub
我从
CustomControl
Render
事件(控件被嵌套)中得到一个异常,即
变量不能为null:Page


有没有一种简单的方法可以解决这个问题,以便在另一个控件的代码中构造的控件可以访问页面上下文?

我唯一看到控件的页面属性为null的时候是控件尚未添加到控件集合中:例如

Me.Controls.Add(helpIcon) //This must happen before calling render

如果控件添加到根控件集合中,则不需要调用render方法

您需要将控件添加到页面的控件树中,然后它将正常呈现,而无需调用render()

更有可能将其添加到页面上的某个容器中:

PlaceHolder1.Controls.Add(new CustomControl());

如果render位于控件集合中,则无需调用它。此操作非常有效。将其添加到控件集合而不是调用
RenderControl
修复了它。
PlaceHolder1.Controls.Add(new CustomControl());