Search code examples
vb.netmaster-pages

Access control in masterpage from shared function of same masterpage


I'm calling a shared function of a masterpage from a content page. In that shared function I want to access a control in the masterpage, but I don't know how.

main.master

<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

'I also tried instantiating a new class of the current masterpage: Ctype(main,Masterpage).CurrencyText

End Function


End Class

From page1.aspx I call:

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

What else can I do?


Solution

  • For what it's worth (I don't know why you need to make it shared), you can use HttpContext to get the reference to your page and from there to your master:

    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