Avatar billede pedalkurwa Nybegynder
09. juni 2008 - 10:55 Der er 10 kommentarer

variabel masterpage?

Hej experter

i forbindelse med opbygningen af et site med mulighed for at vælge flere sprog, vil jeg forhøre om muligheden for at tilknytte en variabel masterpage til content siden, således at menuer og andet tekst får det rigtige sprog også, og det skulle fungere med cookies.

har sjusset mig frem til at det kunne være noget med MasterPageFile="<%# Eval([Cookie med masterpage-sti])%>" men er ikke helt sikker, så kommentarer herom ville være behjælpeligt.

Hilsen Peter
Avatar billede keysersoze Guru
09. juni 2008 - 11:13 #1
du kan ændre masterpage i din codebehind;

protected void Page_Load(object sender, EventArgs e)
{
  MasterPageFile = "~/foo";
}

men det lyder for mig som en forkert retning at lave en masterpage til hvert sprog (hvis det altså er det du gør lige nu) medmindre der er andre forskelle end tekst - til det vil globalization give noget mere frihed.
Avatar billede pedalkurwa Nybegynder
09. juni 2008 - 11:18 #2
ja jeg ved godt det er lidt kringlet, det er fordi masterpagen refererer til sprogafhængie stylesheets, fordi der er billeder med tekst på. der også skal skifte sprog :)
Avatar billede mcnovy Nybegynder
09. juni 2008 - 11:19 #3
her der er der lidt om hvordan du skriver og læser en cookie.
http://www.aspnettutorials.com/tutorials/network/cookies-csharp.aspx
(nogen grund til at du ikke vil benytte dig af Profiles..?

mht: hvordan du vælger MasterPage ved start, så kan du lave den i en PreInit (desværre understøtter MasterPage ikke PreInit, så det skal skrives i dine .aspx sider.

protected void Page_PreInit(object sender, EventArgs e)
    {
        ProfileCommon pb = (ProfileCommon)HttpContext.Current.Profile;
        if (pb.MyTheme != "")
        {
            Page.MasterPageFile = String.Format("~/{0}.Master", pb.MyTheme);
        }
        else
        {
            Page.MasterPageFile = "~/MasterPage.Master";
        }
    }

nu er mit bygget udfra profiler, men med den anden kode, så skulle det ikke være noget problemet at smide de 2 stumper kode sammen.. (eller er jeg gerne behjælpelig med det)

en anden mulighed er at oprette en global.asax side..
og så under
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
}

der skal du så skrive hvad du ønsker siden skal gøre
(Jeg har en kode stump liggende i VB.net liggende, hvis det skulle have din interesse.. (hvis du er til C#, så er den ikke så slem at oversætte (det lykkedes ihvertfald mig. :) ))
Avatar billede mcnovy Nybegynder
09. juni 2008 - 11:25 #4
pedalkurwa..
hvis det bare handler om billeder i din .css,
så lav den som temaer, og skift temaet udfra cookie..
eller, brug din codebehind til at vælge billedet for dig..

det kunne være som følgende

i din .aspx side, lave du et div tag, med et ID og runat="server"
i din codebehind kan du så fange den div tag.
Protected Page-PreRender{object sender, EventArgs e)
{
            Content.Attributes.Add("background-color", "yellow"); //her skriver naturligvis dit background picture istedet
}
Avatar billede mcnovy Nybegynder
09. juni 2008 - 11:34 #5
her er der et lille eksempel (i dit tilfælde, så skal du skifte background-color ud med background image)

codebind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        Content.Attributes.CssStyle.Add("background-color", "yellow");
           
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Content.Attributes.CssStyle.Add("background-color", "blue");
    }
}

.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div id="Content" runat="server">
    <p>Dette er en test</p>
    <p>for at vide hvordan man skifter bagrundsfarven ud dynamisk via codebehind</p>
                <p>
                    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
                </p>
    </div>
    </div>
    </form>
</body>
</html>
Avatar billede pedalkurwa Nybegynder
09. juni 2008 - 11:40 #6
øh ja? lidt meget besvær bare for at udskifte et par billeder og menuteksten, jeg tror bare at jeg for overskuelighedens skyld vil holde mig til keysersoze's løsning, den virker tilforladelig.
Avatar billede mcnovy Nybegynder
09. juni 2008 - 11:50 #7
igen, så har du mulighed for blot at skifte mellem temaer

protected void Page_PreInit(object sender, EventArgs e)
    {
        ProfileCommon pb = (ProfileCommon)HttpContext.Current.Profile;
        if (pb.MyTheme != "")
        {
            Page.Theme = "Dansk";
        }
        else
        {
            Page.Theme ="Engelsk";
        }
    }

bare en lille reminder,
så mener jeg ikke du kan skifte din masterpage ud i Page_Load()
den skal vidst skiftet i Page_Init..
men det kan du jo selv teste..
Avatar billede keysersoze Guru
09. juni 2008 - 11:57 #8
Korrekt - Page_Load var forkert, Page_PreInit er det rigtige.
Avatar billede mcnovy Nybegynder
09. juni 2008 - 12:05 #9
pedalkurwa
og Page_PreInit kan man ikke bruge MasterPage,
så du ender faktisk ud i mit føreste eksempel alligevel.. :)
Avatar billede keysersoze Guru
08. september 2008 - 10:26 #10
lukketid?
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