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 :

Pb MasterPage et UpdatePanel


Sujet :

ASP.NET

  1. #1
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut Pb MasterPage et UpdatePanel
    Salut!

    J'ai un problème en faisant un site en ASP .NET avec AJAX (Framework 3.5 - Visual Studio 2008) :

    J'ai créé une MasterPage AJAX avec dans le PlaceHolder, 2 zones UpdatePanel, l'un qui correspond au menu du site, l'autre au contenu général du site, en fonction de ce que j'ai à afficher. Le ScriptManager est aussi présent.

    Ensuite quand je fais un clic droit sur la MasterPage dans l'explorateur de solution, je choisis "Ajouter une page de contenu" pour pouvoir appliquer ce que j'ai mis dans la MasterPage sur une page web et là, dans la page de contenu, aucun UpdatePanel ! Que dalle ! Je ne peux pas non plus associer de page en créant une nouvelle WebForm, cocher un checkbox pour l'associer à la MasterPage comme sur ce tuto (plus à jour) :

    http://webman.developpez.com/article...et/masterpage/

    L'idéal serait de mettre aussi le menu dans un UpdatePanel dans la MasterPage mais comme le reste ne marche pas, il faut d'abord résoudre le 1er problème.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    fais voir le code de ta masterpage

  3. #3
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut
    Y a rien dedans, le code que j'ai mis est dans la page web de contenu qui superpose la masterpage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    namespace WebSite
    {
        public partial class Site1 : System.Web.UI.MasterPage
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
        }
    }
    et voilà le code de la page ASP au dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
                UpdatePanel updatePannelMenu = new UpdatePanel();
                UpdatePanel updatePanelContent = new UpdatePanel();
            }
        }
    Il suffit que je mette ces 2 lignes dans le Page_load de la masterpage ?
    Ou alors je dois faire hériter chaque page de mon site de cette masterpage ?

    Ça m'embrouille un peu là...

    EDIT : J'ai exécuté pas à pas un debug pour voir ce qu'il faisait et apparemment le Page_load de la masterpage exécute directement le Page_load de la page superposée. Pour tester un peu quelques trucs, notament la création de menus, j'ai créé une classe qui dérive de System.Web.UI.WebControls.Menu, je la dérive ensuite en sous classes pour permettre de faire un truc plus "modulaire", chacune des classes doit permettre d'afficher ensuite n'importe quel menu en fonction des éléments qu'il y a dans les sous classes.

    La création du menu est faite dans le page_load d'une page aspx exécutée au démarrage, le menu est bien créé mais rien ne s'affiche.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    c'était le code ASPX que je demandais, pas le code C#

  5. #5
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut
    Le voilà :

    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
     
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebAppAJAX1.Site1" %>
     
    <!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>Page sans titre</title>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="scriptManager" runat="server" />
     
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
     
                <asp:UpdatePanel ID="UpdatePanelMenu" runat="server">
                </asp:UpdatePanel>
     
            <asp:UpdatePanel ID="UpdatePanelMainContent" runat="server">
            </asp:UpdatePanel>
     
            </asp:ContentPlaceHolder>
        </div>
        </form>
    </body>
    </html>

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK... quand tu fais une page de contenu, elle remplace le contenu du ContentPlaceHolder. Si tu veux avoir 2 parties sur ta page, chacune dans un UpdatePanel, il faut faire 2 ContentPLaceHolders que tu mets chacun dans un UpdatePanel (et non l'UpdatePanel dans le COntentPlaceHolder)

    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
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebAppAJAX1.Site1" %>
     
    <!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>Page sans titre</title>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="scriptManager" runat="server" />
     
            <asp:UpdatePanel ID="UpdatePanelMenu" runat="server">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </asp:UpdatePanel>
     
            <asp:UpdatePanel ID="UpdatePanelMainContent" runat="server">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder2">
                </asp:ContentPlaceHolder>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>
    </html>

  7. #7
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut
    Ok, j'ai fait le contraire en fait. Mais je comprends pas exactement à quoi sert le ContentPlaceHolder, après tout, pourquoi ne pas directement mettre ce qu'on a à mettre dans l'UpdatePanel ? Un peu comme une balise Div en quelque sorte.

    EDIT : J'ai fait tout ça mais j'ai encore un problème de taille :

    Je compte mettre dans un des ContentPlaceHolder un menu (déjà créé via mes classes) et je mets sur le Page_load de la MasterPage le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CustomMenu menu = new CustomMenu();
     
    ContentPlaceHolderMenu.Controls.Add(CustomMenu);
    Je rappelle que ma classe CustomMenu dérive de System.Web.UI.WebControls.Menu

    là j'ai une page web vide à l'affichage, c'est étonnant. En plus dans la page ASPX je n'ai pas de ScriptManager qui est dans la MasterPage, c'est normal ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je ne suis pas sûr que tu aies bien compris le principe des masterpages...

    Ca sert simplement à définir un modèle pour toutes les autre pages. Dans la MasterPage, tu mets un ou plusieurs ContentPlaceHolders, placés comme tu veux, qui seront remplacés par le contenu des balises <asp:Content> définies dans les pages qui utilisent la masterpage. Tu peux mettre un contenu "par défaut" dans un COntentPlaceHolder, mais si la page aspx qui l'utilise définit un contenu pour ce ContentPLaceHolder, le contenu par défaut sera remplacé.

  9. #9
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut
    C'est bon ça fonctionne, le problème venait du code C# pour créer mon menu, c'est parce que j'avais créé tous les menuItem sans ajouter des Items au contrôle qu'il ne m'affichait rien.

    Par contre j'ai un autre problème et c'est ce qui me fait le plus chier en faisant un site web, le positionnement des éléments du site (vive le CSS ).

    Voilà je fais un menu à gauche (tableau dans une div qui contient un des ContentPlaceHolder et prend l'intégralité de la page en hauteur et limitée en largeur. Le contenu devrait être à gauche du menu dans une div qui contient l'autre ContentPlaceHolder.

    Voilà le code CSS du menu (appliqué à une div) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .ContentPlHolderMenu
    {
     
    	width: 100px;
    	height: 768px;
     
    	position: fixed;
     
    	border-color: Fuchsia;
    	border-width: 1px;
    	border-style: dotted;
    }
    et celui du contenu :

    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
     
    .ContentPlHolderMain
    {
    	width: auto;
    	height: auto;
     
    	position: relative;
     
    	overflow: auto;
     
    	border-width: 3px;
    	border-color: Olive;
    	border-style: solid;
    	padding: 3px; 
    }
    Tout mon site est dans une Div qui contient le tout de taille 1024x768.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    euh... j'ai pas compris, c'est quoi le problème ? ça marche pas comme il faut avec tes CSS ?

  11. #11
    Membre très actif Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 563
    Par défaut
    Malheureusement non. C'est pourtant un truc basique que je veux faire, un truc découpé en 2 colonnes, le menu et le reste cote à cote.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben si tu décris pas le problème c'est pas évident de t'aider... "ça marche pas", c'est un peu insuffisant comme explication

    A vue de nez, je dirais qu'il manque un attribut "left: 100px" dans le style .ContentPlHolderMain...

    Mais bon, je maitrise pas super bien CSS, tu ferais mieux d'aller voir le forum CSS, a priori c'est là que sont les spécialistes

  13. #13
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Pour mettre 2 div l'une à coté de l'autre (comportement non natif car les div sont des éléments de type block), il faut mettre float: left;

Discussions similaires

  1. MasterPage VS UpdatePanel + usercontrol
    Par smash dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/03/2011, 12h06
  2. UpdatePanel et MasterPage
    Par Sekigawa dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/04/2010, 09h53
  3. Réponses: 2
    Dernier message: 05/11/2008, 14h23
  4. Réponses: 2
    Dernier message: 24/03/2008, 16h03
  5. Réponses: 6
    Dernier message: 18/01/2008, 17h12

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