我有一个母版页面,可以将用户控件加载到占位符
代码示例
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
答案 0 :(得分:0)
我会在您的母版页中公开一个公共财产,例如ShowWorkText
为String
。此属性设置(或读取)Literal的Text
。它搜索可直接访问的Placeholder
中的控件。然后您的代码更易读,更易于维护。如果您决定将Literal
替换为TextBox
,也会更安全。您必须将页面的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
UserControl中的(Navigation
类型,LiteralShowWork
是litaral):
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