0

ユーザー コントロールをプレースホルダーに読み込むマスター ページがあります。

コード例

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
4

1 に答える 1

0

マスターページでパブリック プロパティを公開しShowWorkTextますString。このプロパティは、リテラルのText. Placeholder直接アクセスできるコントロールを検索します。そうすれば、コードはより読みやすく、保守しやすくなります。たとえば、Literalを aに置き換えるとより安全です。そのプロパティにアクセスするには、ページのプロパティをマスターの実際の型にTextBoxキャストする必要があります。Master

リテラルは aUserControlにあるため、同じアプローチを使用してプロパティを公開する必要があります。次に、マスターはページの代わりにアクセスします。

マスター (タイプ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 で (タイプNavigationLiteralShowWorkリテラルです):

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
于 2013-10-23T15:22:38.640 に答える