IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Variable de session au démarrage du projet


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut Variable de session au démarrage du projet
    Bonjour,

    je suis en train de développer un projet en asp.net (4.0).
    Ce site est composé d'une page Master sur laquelle j'ai un menu alimenté par un fichier xml et de plusieurs pages de contenu (dynamiques, alimentées par une db SQL). Le site sera disponible en Français et en néerlandais.

    Mon problème est le suivant :
    Lorsque les visiteurs iront sur l'url du site www.monsite.be, celui-ci sera par défaut affiché en français.
    Dans le Page_Load() de ma page Master, il n'y a aucun code.

    J'ai rajouté ceci dans mon fichier web.config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <siteMap defaultProvider="MenuFR" enabled="true">
          <providers>
            <add name="MenuFR" type="System.Web.XmlSiteMapProvider" siteMapFile="MenuFR.sitemap"/>
            <add name="MenuNL" type="System.Web.XmlSiteMapProvider" siteMapFile="MenuNL.sitemap"/>
          </providers>
        </siteMap>
    Voici le code de ma page Master (pas de code dans le Page_Load)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     protected void btn_francais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "FRA";
                MenuCharge("FRA");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            protected void btn_neerlandais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "NLD";
                MenuCharge("NLD");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            private void MenuCharge(string codeLangue)
            {
                codeLangue = codeLangue.ToUpper();
                switch (codeLangue)
                {
                    case "FRA":
                        SiteMapDataSource1.SiteMapProvider = "MenuFR";
                        break;
                    case "NLD":
                        SiteMapDataSource1.SiteMapProvider = "MenuNL";
                        break;
                }
            }
    Donc, le visiteur choisit sa langue pour la visite du site à l'aide de 2 liens (Français, Néerlandais)

    Problème, ce changement se fait à moitié.
    En fait, lorsque je clique sur le lien "Néerlandais", le contenu de ma page est bien traduit (bien alimenté par la db SQL). Ma variable de session "CodeLangue" est également bien alimentée ca je m'en sert pour faire mon select dans la base de données selon le code langue choisi par le visiteur)

    Par contre, le menu reste en Français.
    Ca fait plusieurs jours (par intermitence ) que je bloque sur le sujet.
    Quelqu'un aurait une idée pour me débloquer la situation?

    Merci d'avance pour vos coups de main.

    Penchu

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Il y a longtemps que je n'ai pas utilisé ces contrôles mais une chose m'étonne dans ton code.
    Tu affectes une valeur à la propriété SiteMapProvider de ton SiteMapDataSource mais à aucun endroit tu n'affectes cette datasource à ton SiteMap.
    Je pense que ton soucis vient de là.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Salut calagan99,

    merci pour ta réponse.
    Je ne comprends pas la philosophue de ce contrôle. Voici comment j'ai procédé (méthode Menu_charge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
            protected void btn_francais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "FRA";
                MenuCharge("FRA");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            protected void btn_neerlandais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "NLD";
                MenuCharge("NLD");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            private void MenuCharge(string codeLangue)
            {
                codeLangue = codeLangue.ToUpper();
                switch (codeLangue)
                {
                    case "FRA":
                        SiteMapDataSource1.SiteMapProvider = "MenuFR";
                        //NavigationMenu.DataSource = SiteMapDataSource1;
                        NavigationMenu.DataSourceID = SiteMapDataSource1.SiteMapProvider;
                        break;
                    case "NLD":
                        SiteMapDataSource1.SiteMapProvider = "MenuNL";
                        //NavigationMenu.DataSource = SiteMapDataSource1;
                        NavigationMenu.DataSourceID = SiteMapDataSource1.SiteMapProvider;
                        break;
                }
            }
    J'ai du louper un truc ou alors, j'ai rien compris car ça ne fonctionne pas. J'ai le même souci.
    Y a-t-il autre chose à ajouter?

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Là, tu affectes un "SiteMapProvider" à la propriété DataSourceID de ton menu.
    Or, comme la propriété l'indique, il faut que tu lui passes un ID.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void MenuCharge(string codeLangue)
            {
                codeLangue = codeLangue.ToUpper();
                switch (codeLangue)
                {
                    case "FRA":
                        SiteMapDataSource1.SiteMapProvider = "MenuFR";
                        NavigationMenu.DataSource = SiteMapDataSource1;
    OU
                        NavigationMenu.DataSourceID = SiteMapDataSource1.ID;
                        break;
                    case "NLD":
                        SiteMapDataSource1.SiteMapProvider = "MenuNL";
                        NavigationMenu.DataSource = SiteMapDataSource1;
    OU
                        NavigationMenu.DataSourceID = SiteMapDataSource1.ID;
                        break;
                }
    NavigationMenu.DataBind();
            }
    devrait mieux fonctionner.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 156
    Points : 54
    Points
    54
    Par défaut
    Salut Calagan99,

    désolé, mais je viens d'essayer cette méthode, mais le résultat est le même.
    J'avoue ne pas comprendre.
    Par contre, j'ai trouvé comment solutionner mon problème (voir Page_Load)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    protected void Page_Load(object sender, EventArgs e)
            {
                if ((string)Session["CodeLangue"] == "" || (string)Session["CodeLangue"] == null)
                {
                    MenuCharge("FRA");
                    Session["CodeLangue"] = "FRA";
                }
                else
                {
                    MenuCharge((string)Session["CodeLangue"]);
                }
            }
     
            protected void btn_francais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "FRA";
                MenuCharge("FRA");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            protected void btn_neerlandais_Click(object sender, EventArgs e)
            {
                Session["CodeLangue"] = "NLD";
                MenuCharge("NLD");
     
                Response.Redirect("content.aspx?IDCat=1");
            }
     
            private void MenuCharge(string codeLangue)
            {
                codeLangue = codeLangue.ToUpper();
                switch (codeLangue)
                {
                    case "FRA":
                        SiteMapDataSource1.SiteMapProvider = "MenuFR";
                        //NavigationMenu.DataSource = SiteMapDataSource1;
                        NavigationMenu.DataSourceID = SiteMapDataSource1.ID;
                        break;
                    case "NLD":
                        SiteMapDataSource1.SiteMapProvider = "MenuNL";
                        //NavigationMenu.DataSource = SiteMapDataSource1;
                        NavigationMenu.DataSourceID = SiteMapDataSource1.ID;
                        break;
                }
                NavigationMenu.DataBind();
            }
    Un tout grand merci pour ton aide.
    Si je peux te rendre l'appareil un jour ou l'autre, n'hésite pas.

    A+

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Premièrement, si la discussion est résolu merci de cliquer sur le bouton prévu à cet effet en bas à gauche.
    Deuxièmement, si ton site est destiné à Internet, je te conseille de lire les tutoriels sur l'internationalisation des applications web. Notamment celui-ci: http://immobilis.developpez.com/arti...-base-donnees/. C'est une technique qui a été utilisée pour un site traduit en 5 langues. La solution que tu utilises marche certes, mais tu va galérer si ton site grossi et que tu ajoutes des langues.
    Troisièmement, tu devrais pouvoir remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (string)Session["CodeLangue"] == ""
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(String.IsNullOrEmpty(Session["CodeLangue"]))
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perte de variables de session + projets
    Par papawemba dans le forum C#
    Réponses: 2
    Dernier message: 19/06/2007, 17h55
  2. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo