嵌套的用户控件无法访问“渲染”中的“页面上下文”

时间:2012-11-20 19:32:53

标签: asp.net vb.net user-controls custom-controls

这个问题似乎与How to access page controls from user control?有关,但我不相信它是重复的。

我有许多用户控件需要在Page个事件期间访问Render变量。当我将控件放在.aspx页面上时,这很好用。但是,当我尝试像这样嵌套控件时:

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

    helpIcon.RenderControl(writer)

    MyBase.Render(writer)
End Sub

我从Variable cannot be null: Page Render事件(被嵌套的控件)中获得CustomControl例外。

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

2 个答案:

答案 0 :(得分:1)

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

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

如果将控件添加到有根控件集合

,则无需调用render方法

答案 1 :(得分:1)

你需要添加控件页面的控制树,然后它将正常呈现而不必调用Render()

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

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

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