Avatar billede Slettet bruger
07. januar 2006 - 15:17 Der er 3 kommentarer og
1 løsning

Sætte Page.Theme i MasterPage

Hejsa,

Jeg har en lille web-applikation, der gør brug af Themes.
Jeg har forsøgt at sætte en Page_PreInit i min MasterPage, men på denne måde virker det ikke på alle contentpages.

I stedet har jeg nu en Page_PreInit metode i samtlige code-behindfiler i mine contentpages:

protected void Page_PreInit(object sender, EventArgs e)
    {
        Page.Theme = ((MasterPage)this.Master).GetSiteTheme;
    }

Hvor Page.Theme hentes fra en public property fra Masterpage.

Men er det ikke muligt at sætte dette et centralt sted (i master), sådan at man ikke skal kopiere den givne PreInit metode ind hver gang en side tilføjes til applikationen?
Avatar billede dr_chaos Nybegynder
08. januar 2006 - 10:38 #1
du kan sætte et pagetheme 3 steder:

i page directive:
<%@ Page Language="VB" MasterPageFile="~/Templates/Drakkar.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" title="Untitled Page" Theme="Red" %>

i web.config
<pages theme="Red">

og som du har gjort i preinit
Avatar billede Slettet bruger
08. januar 2006 - 12:37 #2
Ja.
De første 2 er udelukket da det skal kunne sættes ud fra en cookie - altså, der er flere themes og brugeren skal have mulighed for at sætte det selv.

I min masterpage har jeg en public property:

public string GetSiteTheme
    {       
        get
        {
            if (Request.Cookies["SiteTheme"] != null)
                return Request.Cookies["SiteTheme"].Value.ToString();
            else
                return "Theme1";
        }
    }

Så har jeg i hver af mine klasser haft en PreInit-metode:

protected void Page_PreInit(object sender, EventArgs e)
    {
        Page.Theme = ((MasterPage)this.Master).GetSiteTheme;
    }

Dette er nu ændret sådan at jeg har en klasse kaldet BaseClass, der indeholder denne PreInit-metode, og hvor alle andre cs-klasser nedarver fra denne.

Man kan sige at problemet til dels er løst, men jeg ville så gerne have mulighed for at definere dette i masterpage cs-klassen og på denne måde undgå at skulle definere en nedarvning til BaseClass hver gang jeg opretter en ny webform. Er dette muligt?
Avatar billede dr_chaos Nybegynder
08. januar 2006 - 12:42 #3
Jeg tror ikke det er muligt da theme skal sættes på hver side.
Men kan tage fejl.
Avatar billede Slettet bruger
09. januar 2006 - 11:14 #4
Skidt med det.
Jeg kører det som det er nu. Må så bare leve med at jeg skal definere den omtalte nedarvning på alle nye sider, men det er da bedre end hvis jeg skulle skrive alt det med cookie og så lave det om i hver klasse hvis jeg fandt en bedre metode senere.
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