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 :

[ASP.NET] Comment récupérer données depuis une MasterPage ?


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 43
    Points : 35
    Points
    35
    Par défaut [ASP.NET] Comment récupérer données depuis une MasterPage ?
    Bonjour,
    Je revenais vers vous car je souhaitais savoir si quelqu'un savait comment récupérer des valeurs envoyées depuis la MasterPage vers la pagecontent (celle qui prend la place du ContentPlaceHolder)
    Par exemple la Masterpage posséde un contrôle et je souhaite depuis la page qui prend la place du ContentPlaceHolder récupérer la valeur de ce contrôle sélectionné ?
    Merci de votre aide.
    A+ et bon week end Fred

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Bien sûr. Par exemple, si dans la master page tu as un label dans l'attribut id est monLabel, tu peux taper ce code pour y accéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Label lb= Master.FindControl("monLabel") as Label;
    if(lb != null)
    {
       lb.Text = ....
    }
    On dit merci à la propriété Master de la page de contenu

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Merci de ce retour. J'ai essayé en vain de faire fonctionner cette technique(exemple ci-dessous).
    Je n'arrive pas à récupérer la valeur qui se trouve dans MasterTextBox et à l'afficher dans un autre textBox de la Default2.aspx (celui ci reste vide).
    As-tu une idée ?
    Merci de ton retour et de tes idées.
    Bon week end, cordialement,
    Fred

    MasterPage
    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
     
    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
     
    <!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>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="MasterTextBox" runat="server" AutoPostBack="True"></asp:TextBox>
    <asp:HyperLink NavigateUrl="~/Default2.aspx" ID="HyperLink1" runat="server">HyperLink</asp:HyperLink>
    <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
    </asp:contentplaceholder>
    </div>
    </form>
    </body>
    </html>
    Default2.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Label ID="Label2" runat="server" Text="deuxième page" BackColor="Cyan"></asp:Label>
    <br />
    &nbsp;
    </asp:Content>
    Default2.aspx.cs
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected void Page_Load(object sender, EventArgs e)
    {
    TextBox lb = Master.FindControl("MasterTextBox") as TextBox;
    if (lb != null)
    {
    Page.Title = "passage dans If";
    if(!lb.Text.Equals(""))
    Label2.Text = lb.Text;
    else
    Label2.Text = "pas de valeur concrète!!";
    }
    }

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    C'est pourtant la bonne technique. Par contre, si tu essayes du code VB dans une page Csharp, ça risque de pas fonctionner comme tu veux or, c'est apparement ce que tu fais puisque

    <%@ Page Language="C#"

    et que dans le load tu fais


    TextBox lb = Master.FindControl("MasterTextBox") as TextBox;
    if (lb != null)
    {
    Page.Title = "passage dans If";
    if(!lb.Text.Equals(""))
    Label2.Text = lb.Text;
    else
    Label2.Text = "pas de valeur concrète!!";
    }
    c'est à dire du VB

    Donc, en csharp, je ferais comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TextBox TmpTextBox = (TextBox)Master.FindControl("MasterTextBox");
    if(TmpTextBox != null && TmpTextBox.Text != "")
    {
      //recupère le texte
    }
    else
    {
     //pas de texte à récupérer
    }

  5. #5
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    non non, c'est bien du C#

    La technique que tu donnes pour récupérer l'objet Textbox n'est pas bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TextBox TmpTextBox = (TextBox)Master.FindControl("MasterTextBox");
    if(TmpTextBox != null && TmpTextBox.Text != "")
    {
      //recupère le texte
    }
    else
    }
      //pas de texte à récupérer
    }
    car tu castes directement l'objet en TextBox. Apres tu vérifies si l'objet n'est pas null au cas où ça ne serait pas une textbox.
    Or, si ce n'est pas une texbox et que tu essaies quand même de le convertir en Texbox, TmpTextBox ne prend pas la valeur null : le programme plante !!!!!!

    Voici la bonne solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TextBox lb = Master.FindControl("MasterTextBox") as TextBox;
    if (lb != null)
    {
    }
    Le mot clef "as" fait parti du C# . Grace à lui, si l'objet n'est pas une textbox, la tentative de caste renvoit effectivement null. Donc là tu peux ensuite faire un if(lb != null)

  6. #6
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Points : 227
    Points
    227
    Par défaut
    une autre technique consiste a créer une proprieté pour recuperer le String du TextBox

    dans ta page master tu declare une proprieté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String LeNomDeTonChamp
    {
    get (return TonTextBox.Text.Trim())
    set (TonTextBox.Text = value.Trim())
    }
    de l'autre coté sur ta page pour exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String LaValeur = TaMasterPage.LeNomDeTonChamp;
    par contre verifie l'etat du ViewState de ton control en master.Page
    et essais de gerer un postback sur la page.

    de plus en C# 2, tu as une methode pour la valeur d'un string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.IsNullOrEmpty(TonTextBox);

    Bon code

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par The_badger_man
    non non, c'est bien du C#

    La technique que tu donnes pour récupérer l'objet Textbox n'est pas bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TextBox TmpTextBox = (TextBox)Master.FindControl("MasterTextBox");
    if(TmpTextBox != null && TmpTextBox.Text != "")
    {
      //recupère le texte
    }
    else
    }
      //pas de texte à récupérer
    }
    car tu castes directement l'objet en TextBox. Apres tu vérifies si l'objet n'est pas null au cas où ça ne serait pas une textbox.
    Or, si ce n'est pas une texbox et que tu essaies quand même de le convertir en Texbox, TmpTextBox ne prend pas la valeur null : le programme plante !!!!!!

    Voici la bonne solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TextBox lb = Master.FindControl("MasterTextBox") as TextBox;
    if (lb != null)
    {
    }
    Le mot clef "as" fait parti du C# . Grace à lui, si l'objet n'est pas une textbox, la tentative de caste renvoit effectivement null. Donc là tu peux ensuite faire un if(lb != null)
    Lol, j'avais encore jamais vu cette syntaxe en C#. J'aurai appris un truc sur ce thread. Par contre, à mon avis, le garçon n'a toujours pas sa solution

Discussions similaires

  1. Ado: comment récupérer les données depuis une bd?
    Par zidane2 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2010, 01h09
  2. ASP.NET - Ouvrir un binaire depuis une base SQL Server
    Par nono27200 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 16/10/2008, 20h47
  3. [VB.Net] Comment récupérer dans un textbox une donnée BDD ?
    Par zzzmoi dans le forum Accès aux données
    Réponses: 10
    Dernier message: 08/07/2007, 02h08
  4. [VB.Net] Comment récupérer les proprietes d'une image ?
    Par Cirdan Telemnar dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/06/2006, 16h15
  5. Réponses: 1
    Dernier message: 05/05/2006, 14h37

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