3

コンテンツ ページからマスターページの共有関数を呼び出しています。その共有機能で、マスターページのコントロールにアクセスしたいのですが、方法がわかりません。

メインマスター

<asp:Literal ID="ltCurrency" runat="server" />

main.master.vb

Partial Public Class main
Inherits System.Web.UI.MasterPage

Public Property CurrencyText() As String
    Get
        Return ltCurrency.Text
    End Get
    Set(ByVal value As String)
        If value <> "" Then
            ltCurrency.Text = value
        End If
    End Set
End Property

Public Shared Function DoSomething() As String  
    ltCurrency.Text="SOME TEXT" 'throws error: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.    

    CurrencyText="SOME TEXT" 'this property isn't found at all

'現在のマスターページの新しいクラスのインスタンス化も試みました: Ctype(main,Masterpage).CurrencyText

End Function


End Class

page1.aspx から次のように呼び出します。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    main.DoSomething()
End Sub

他に何ができますか?

4

2 に答える 2

4

価値があるのは(共有する必要がある理由がわかりません)、HttpContextページへの参照を取得し、そこからマスターへの参照を取得するために使用できます。

Public Shared Function DoSomething() As String
    Dim myPage = TryCast(HttpContext.Current.Handler, Page)
    If myPage IsNot Nothing Then
        Dim myMaster As main = TryCast(myPage.Master, main)
        If myMaster IsNot Nothing Then
            myMaster.ltCurrency.Text = "SOME TEXT" 
            myMaster.CurrencyText = "SOME TEXT"
        End If
    End If
End Function
于 2013-02-26T11:37:16.513 に答える
0

ステップ 1: コンテンツ ページでイベントを作成します。

Public Event DoSomething(sender as object, myString as String)

ステップ 2: メインページで、コンテンツ ページで作成したばかりのイベントにイベント ハンドラーを追加します。

Addhandler contentPage.DoSomething, AddressOf ChangeCurrentText

ステップ 3: ハンドラーで、やりたいことを何でもします。

Private Sub ChangeCurrentText(sender, text)
ltCurrency.Text = text
End Sub

Step4: コンテンツページでイベントを発生させる

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    RaiseEvent DoSomething(ME, "BLAH BLAH")
End Sub
于 2013-02-26T11:37:49.893 に答える