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 :

Récupérer la valeur ".Text" d'un TextBox


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut Récupérer la valeur ".Text" d'un TextBox
    Salut,

    Je travaille sur un projet ASP sur Visual Studio. À un moment, dans le code-behind, je crée plusieurs TextBox genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TextBox tb = new TextBox();
    tb.ID = "id";
    Puis je tape des valeurs dans chacune des TextBox et je dois récupérer chacune d'entre elles pour les ajouter dans une table SqlServer. Mais puisque ces TextBox ne sont pas "physiquement" créées, je dois récupérer la valeur de ".Text" en trouvant le Control (par FindControl) et en le convertissant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string test = ((TextBox)this.FindControl("id")).Text;
    Mais le problème c'est que ".Text" est toujours vide même si je remplis le TextBox. Est-ce normal ?

    Merci d'avance de votre aide.

  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 : 42
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu ne donnes pas assez de code pour qu'on puisse diagnostiquer le problème.

    Cependant, je pense à un soucis de postback.
    A mon avis, tu instancies tes Textbox dans ton PageLoad ou PagePreRender, c'est bien ça ?
    Si oui, testes-tu avant ? Si non, alors à chaque postback, tes Textboxs sont recrées et leur propriété Text est donc vide.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Ah oui peut-être est-ce à cause de ça, en fait je crée les TextBox lors d'une fonction que j'appelle quand je clique sur un Item d'un menu. Ensuite, je veux récupérer le ".Text" quand je clique sur un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void RadMenu1_ItemClick(object sender, Telerik.Web.UI.RadMenuEventArgs e)
    {
        if (e.Item.Text == "New")
        {
            loadMainTemplate(3);
        }
    }
    C'est par "loadMainTemplate" que je crée les TextBox.
    Je vais essayer de tester avec le PostBack.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Ça n'a pas l'air de fonctionner. À quel moment dois-je mettre le "if (!Page.IsPostBack)" ?

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Juju54350 Voir le message
    Ça n'a pas l'air de fonctionner. À quel moment dois-je mettre le "if (!Page.IsPostBack)" ?
    En général, c'est dans l'event handler Page_Load. Je suppose que c'est là que tu crées tes TextBox, non ?

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Je l'ai dit au-dessus, je crée les TextBox quand je clique sur un Item d'un menu (j'appelle en fait une fonction). Ce n'est donc pas dans le Page_Load mais ça fait un PostBack quand même non ?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Juju54350 Voir le message
    Je l'ai dit au-dessus, je crée les TextBox quand je clique sur un Item d'un menu (j'appelle en fait une fonction). Ce n'est donc pas dans le Page_Load mais ça fait un PostBack quand même non ?
    Si tu appelles une méthode du code-behind, tu fais obligatoirement un PostBack et tu lèves l'évenement Page_Load.

    Donc, oui, cela fait un PostBack.

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Oui d'accord mais quand je clique sur le bouton permettant de récupérer les ".Text" de tous les TextBox, ça va d'abord exécuter ce qu'il y a dans la procédure Click avant le Page_Load non ?
    Et en même temps, les TextBox ne sont créées seulement si je clique dans le menu. Mais comme tu dis, dès qu'un PostBack est lancé, tous les ".Text" reviennent à "".
    Y a-t-il une alternative pour récupérer ces valeurs ?

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Juju54350 Voir le message
    Oui d'accord mais quand je clique sur le bouton permettant de récupérer les ".Text" de tous les TextBox, ça va d'abord exécuter ce qu'il y a dans la procédure Click avant le Page_Load non ?
    Non. C'est le contraire.

  10. #10
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Ok mais je suis un peu perdu. À quel moment puis-je récupérer les valeurs quand elles sont remplies ? Il faudrait donc les récupérer dans le Load...

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Juju54350 Voir le message
    Il faudrait donc les récupérer dans le Load...
    Oui, c'est une possibilité. (mais je n'en vois pas forcément la nécessité).

    Sinon, je suis pas du tout pro des questions d'IHM en web mais les valeurs saisies dans les textex box sont dans le ViewState, non ? (si quelqu'un peut confirmer).

    Tu devrais lire cela sur le cycle de vie d'une page ASP.NET :

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx

  12. #12
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Pour ce qui est du ViewState il est toujours à True et j'ai même essayé de référencer la propriété pour chacun des TextBox à True mais rien ne change, je ne parviens pas à récupérer la valeur de ".Text".

    Mais selon ton lien BlueDeep, il faudrait récupérer les valeurs avant le Load, dans Page_Init par exemple ?

  13. #13
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 38
    Par défaut
    Toujours les mêmes erreurs pour les débutants en Asp.net, vous créez vos contrôles comme si vous travaillez toujours sur des winforms.

    Quand tu fais un postBack ta page se rafraîchit(appel au serveur), si le viewstate est activé, les valeurs de tes controles y seront stockées.

    Donc en gros à ce moement là tes controles textbox(server) n'existent plus.
    mais t'as toujours les valeurs des <input type="text"> génerés.
    Tes valeurs tu vas les chercher dans le dictionnaire Viewstate

  14. #14
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Ok AghilasB, je vais chercher de ce côté-là.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Bonjour,

    D'un coté :
    Je vois pas trop l’intérêt de l'utilisation des textBox à l'intérieur de ta méthode loadMainTemplate. Si ce n'est que pour stocker des données et les récupérer derrière pour les insérer dans une BDD, ça n'a aucun intérêt a mon avis et tu peut tout simplement utiliser des variables String (Locales à ta méthodes ou globales à ta page). si c'est pour les insérer dynamiquement dans ta page, dans ce cas ça peut avoir un sens etc ...

    D'un autre coté :
    Et pour une raison ou une autre, à quel endroit tu déclare tes variables TextBox !?
    Donc en gros à ce moement là tes controles textbox(server) n'existent plus.
    mais t'as toujours les valeurs des <input type="text"> génerés.
    Tes valeurs tu vas les chercher dans le dictionnaire Viewstate.
    Mais je vois null part que notre amis Juju54350 nous dit qu'il rajoute les TextBox crées dynamiquement a la page !!

    Cdt,

  16. #16
    Membre chevronné Avatar de Pilru
    Homme Profil pro
    Dev ASP.NET/jQuery ; Admin ORACLE
    Inscrit en
    Septembre 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev ASP.NET/jQuery ; Admin ORACLE

    Informations forums :
    Inscription : Septembre 2007
    Messages : 491
    Par défaut
    Citation Envoyé par Juju54350 Voir le message
    Pour ce qui est du ViewState il est toujours à True et j'ai même essayé de référencer la propriété pour chacun des TextBox à True mais rien ne change, je ne parviens pas à récupérer la valeur de ".Text".

    Mais selon ton lien BlueDeep, il faudrait récupérer les valeurs avant le Load, dans Page_Init par exemple ?
    Les contrôles créés dynamiquement n'existent pas dans l'arbre des contrôles (arbres construit à partir du code aspx) après un postack. Donc pas recupération de leur état par le viewstate.
    A chaque postback, il faut les créer dans l'évènement Page_Init() car le viewstate est appliqué entre cet évènement et Page_Load().

  17. #17
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Citation Envoyé par sou_rif Voir le message
    Bonjour,

    D'un coté :
    Je vois pas trop l’intérêt de l'utilisation des textBox à l'intérieur de ta méthode loadMainTemplate. Si ce n'est que pour stocker des données et les récupérer derrière pour les insérer dans une BDD, ça n'a aucun intérêt a mon avis et tu peut tout simplement utiliser des variables String (Locales à ta méthodes ou globales à ta page). si c'est pour les insérer dynamiquement dans ta page, dans ce cas ça peut avoir un sens etc ...

    D'un autre coté :
    Et pour une raison ou une autre, à quel endroit tu déclare tes variables TextBox !?


    Mais je vois null part que notre amis Juju54350 nous dit qu'il rajoute les TextBox crées dynamiquement a la page !!

    Cdt,
    Si, en fait, je crée les TextBox dans la méthode loadMainTemplate() et je veux récupérer leur valeur ".Text" après que j'ai cliqué sur un bouton. Mais le problème c'est que ".Text" est toujours vide bien que je parvienne à localiser le Control (FindControl("TextBox1")).

    => Pilru : Ce qui veut dire que je dois créer les TextBox dans Page_Init et que je peux récupérer leur ".Text" via le ViewState dans Page_Load ?

  18. #18
    Membre éclairé
    Inscrit en
    Juillet 2010
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2010
    Messages : 292
    Par défaut
    Bon au final, en cherchant un peu dans mon bouquin de C#, j'ai trouvé un truc intéressant que je ne connaissais pas :

    Dans cette liste, il y a toutes les valeurs saisies dans les TextBox ce qui me permet de les récupérer avant que les TextBox ne disparaissent.

  19. #19
    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 : 42
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu as raison, plutôt que d'essayer de comprendre le cycle de vie d'une page Asp.Net, autant utiliser une bidouille...
    Ton code fonctionnera, mais dans deux semaines tu poseras une question identique parce que tu n'auras pas pris le temps de bien saisir le fonctionnement d'Asp.Net.
    Dommage...

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

Discussions similaires

  1. Récupérer la valeur de plusieurs cel dans des textbox
    Par Mon_ami dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/01/2009, 09h03

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