【问题标题】:Nested user controls can't access Page context in Render嵌套用户控件无法访问渲染中的页面上下文
【发布时间】:2012-11-20 19:32:52
【问题描述】:

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

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

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

    helpIcon.RenderControl(writer)

    MyBase.Render(writer)
End Sub

我从CustomControl(嵌套的控件)的Render 事件中得到一个异常Variable cannot be null: Page

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

【问题讨论】:

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


    【解决方案1】:

    您需要在页面的控件树中添加控件,然后它会正常渲染而无需调用Render()

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

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

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

    【讨论】:

    • 这非常有效。将它添加到控件集合而不是调用 RenderControl 修复它。
    【解决方案2】:

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

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

    如果控件被添加到有根控件集合中,则无需调用 render 方法

    【讨论】:

    • 控件集合中的render不需要调用
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多