Avatar billede emkay Nybegynder
26. juli 2007 - 11:48 Der er 9 kommentarer og
1 løsning

Adgang til Masterpage kontroller fra Custom Class

Hey..

Jeg har en masterpage med et panel, der skal vises eller ikke vises afhængig af siden og nogle andre ting.
På siderne kører jeg en funktion i min custom class, som derfra skal styre om panelet bliver vist eller ej.

Pseudo-kode:



************************
customclass.vb:

    Public Function getvisning(diversevariabler)
        'Diverse kald til database, der finder ud af om panelet skal vises eller ej.
        'Returnerer True eller False..
    End

    Public Sub vispanel(ByVal bVispanel)
        'Visning af Panel i masterpagen
        Panel.Visible = bVispanel
    End Sub



************************
side.aspx:

    Dim cc AS New customclass
   
    cc.vispanel(getvisning(diversevariabler))

************************

Jeg kan så bare ikke helt gennemskue hvordan man får fat i masterpagen til den side, der har kaldt funktionen vispanel.
Der er kun en enkelt masterpage på hele sitet.
Af forskellige årsager er det nødvendigt at kalde visningen af panelet fra min custom class og ikke fra hver side.
Så hvordan gør man lige det?
Avatar billede neoman Novice
26. juli 2007 - 12:11 #1
På de content sider som skal snakke med din master page properties/methods tilføj :

<%@ MasterType virtualpath="~/MinMastersNavn.master" %> 

for at få properties fra masteren strongly typed.

På masteren lav public metoder/parametre som udfører det du ønsker på masteren.

På content page kan du tilgå masterens metoder/properties som f.eks.:

            Master.property_name = min_værdi
Avatar billede emkay Nybegynder
26. juli 2007 - 13:07 #2
Jamen som sagt skal det jo være fra min Custom class jeg vil tilgå funktionen.

Det du skriver kan jo gøres med følgende:

Dim m As MasterPage = CType(Page.Master, MasterPage)
m.funktionnavn()

Hvordan tilgår jeg funktioner og kontroller på min masterpage fra min custom class?
Avatar billede neoman Novice
26. juli 2007 - 13:13 #3
Din custom class ligger formentligt for sig selv og aner intet om masterpages. Så skal den kaldes fra content siden med myClass.myMethod(....., myMasterPage...) hvor metoden så skal have en property med typen MasterPage defineret i sin parameter liste
Avatar billede emkay Nybegynder
26. juli 2007 - 13:26 #4
Hmm.. Det lyder da underligt at det er sådan man er nødt til at gøre det.
Men på den anden side lyder det jo egentlig også meget logisk at min custom class ik aner noget om hvilken masterpage der bliver brugt hvor.

Anyway. Hvis jeg så vil gøre som du foreslår, hvordan skal det så gøres helt præcis?

Har prøvet med


cc.vispanel(getvisning(diversevariabler), Page.MasterPage)



Public Sub vispanel(ByVal bVispanel, ByRef mpage)
        mpage.Panel.Visible = bVispanel
End Sub


Det virker bare ikke rigtig. Så jeg mangler stadig et eller andet.. :o/
Avatar billede neoman Novice
26. juli 2007 - 13:31 #5
Hvad betyder "virker ikke rigtigt" specifikt ?
Avatar billede neoman Novice
26. juli 2007 - 13:40 #6
Altså .. hvis din masterpage har en specifik panel som hedder myPanel  så bør det vel se sådan her ud:

Public Sub vispanel(BYVal bVisPanel as Boolean, ByVal myMasterPage as MasterPage)
        myMasterPage.myPanel.Visible = bVispanel
End Sub

Nu er det uklart om du har gjort som jeg skrev  12:11:39 eller ej i- hvis ikke, så skal du nok lave noget i denne stil:

Public Sub vispanel(BYVal bVisPanel as Boolean, ByVal myMasterPage as MasterPage)
    dim myPanel as  Panel
    myPanel = Ctype(myMasterPage.FindControl("name_of_my_panel"), Panel)
    myPanel.Visible = bVispanel
End Sub
Avatar billede emkay Nybegynder
26. juli 2007 - 13:50 #7
Det forsøgte jeg stort set også før.
Men det er som om den ikke vil fange masterpage-referencen, der bliver sendt med helt korrekt.

Nu skriver den All parameters must be explicitly typed if any are." og den fejl henviser til myMasterPage i linjen

Public Sub vispanel(BYVal bVisPanel as Boolean, ByVal myMasterPage as MasterPage)
Avatar billede neoman Novice
26. juli 2007 - 14:02 #8
Nu ved jeg ikke helt hvor du er henne - har du <%@ MasterType virtualpath="~/MinMastersNavn.master" %>  inkluderet ? I det fald skal de public properties være typed og du skal nok have følgende i code behind på din master

  Public ReadOnly Property myPanel As Panel
        Get
            myPanel = Panel1 ' hvis det er panel 1
        End Get

    End Property

Hvis du ikke har inkluderet den, så bør følgende fungere

Public Sub vispanel(BYVal bVisPanel as boolean, ByVal myMasterPage as MasterPage)
    dim myPanel as  Panel
    myPanel = Ctype(myMasterPage.FindControl("name_of_my_panel"), Panel)
    myPanel.Visible = bVispanel
End Sub
Avatar billede emkay Nybegynder
26. juli 2007 - 14:14 #9
Jep.. Det fungerer nu. Ved ik lige hvad der gik galt før, men det fungerer som det skal nu.

Tak for hjælpen du.. Smid et svar :)
Avatar billede neoman Novice
26. juli 2007 - 14:15 #10
velbekomme)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester