从用户控件内的母版页查找文本控件,获取对象引用未设置为对象的实例.错误

本文关键字:控件 设置 对象 实例 对象引用 错误 用户 母版页 查找 文本 获取 | 更新日期: 2023-09-27 18:36:30

>我有一个母版页,它将用户控件加载到占位符

代码示例

placeHolderNav.Controls.Clear()
Dim ucATG As UserControl = DirectCast(LoadControl("/main/navigation.ascx"), UserControl)
ucATG.ID() = "lookJS"
placeHolderNav.Controls.Add(ucATG)

在该 navigation.ascx 控件中,有一个 ID 为 litShowWork 的文本。子页面是 getwork.aspx ,它有一个名为从子页面插入到该文本中的方法

代码示例

Dim litOmniture As Literal = DirectCast(Me.Master.FindControl("lookJS").FindControl("litShowWork"), Literal)
If Not litOmniture Is Nothing Then
    litShowWork.Text &= "hello"
End If

从用户控件内的母版页查找文本控件,获取对象引用未设置为对象的实例.错误

我会在您的母版页中公开一个公共属性,例如 ShowWorkTextString .此属性设置(或读取)文本的Text。它在可直接访问的Placeholder中搜索控件。这样,您的代码更具可读性和可维护性。例如,如果您决定用TextBox替换Literal,也会更安全。您必须将页面的 Master 属性强制转换为主控形状的实际类型才能访问该属性。

由于文本位于UserControl因此应使用相同的方法来公开该属性。然后,主控版访问它而不是页面。

在主控形状(类型 Site ):

Public Property ShowWorkText As String
    Get
        Dim navigationControl As Navigation = Me.placeHolderNav.Controls.OfType(Of Navigation)().FirstOrDefault()
        If navigationControl IsNot Nothing Then
            Return navigationControl.ShowWorkText
        End If
        Return Nothing
    End Get
    Set(value As String)
        Dim navigationControl As Navigation = Me.placeHolderNav.Controls.OfType(Of Navigation)().FirstOrDefault()
        If navigationControl IsNot Nothing Then
            navigationControl.ShowWorkText = value
        End If
    End Set
End Property

在用户控件(类型 Navigation 中,LiteralShowWork是礼仪):

Public Class Navigation
    Inherits System.Web.UI.UserControl
    Public Property ShowWorkText As String
        Get
            Return LiteralShowWork.Text
        End Get
        Set(value As String)
            LiteralShowWork.Text = value
        End Set
    End Property
End Class

在要设置文本的页面中(如前所述Site是主页的类型):

Dim site As Site = TryCast(Me.Master, Site)
If site IsNot Nothing Then
    site.ShowWorkText = "hello"
End If