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 :

TextChanged jamais lancé


Sujet :

ASP.NET

  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut TextChanged jamais lancé
    Bonjour,


    Je travaille actuellement sur un formulaire où je dispose d'un boton qui me permet d'ajouter une nouvelle textbox a chaque clic. Ces textbox sont dans un placeholder donc à chaque chargement de la page, je fait reafficher toutes les textbox : le hic c'est que je perds le texte saisie a l'interieur à chaque fois ...
    Pour pallier à cela j'aurai souhaité qu'a chaque fois que le texte d'une textbox est modifié, j'en sois notifié : pour cela j'ai par exemple le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tQuestion.TextChanged += new EventHandler(ReponseSaisie);
     
    ....
     
    public void ReponseSaisie(object sender, System.EventArgs e)
    {
       ...
    }
    mais la methode ReponseSaisie n'est jamais appelée

    Vous avez une idée de la cause ?

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    dans tes textboxs est ce que tu as mis la propriété enableviewstate à true?
    si ca n'est pas le cas fait le et regarde ce qui se passe.
    en fait c'est quand il reconstitue ta page que le serveur n'a pas les valeurs de tes textbox donc les évenements textchanged à ce moment là ne fonctionnent pas.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    je teste ça de suite

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    je viens de tester et helasnon l'evenement n'est pas plus lancé. Je ne serais pas contre contourner le probleme : y a il un moyen pour que mon placeholder ne perde pas tous ses composants lorsque la page est rechargée suite a une validation du formulaire ?

  5. #5
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    autopostback à true?

  6. #6
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    si je mets l'autopostback à true, dès que je fais une modification, le formulaire est validé et la page rechargée mais la methode n'est pas appelée pour autant

  7. #7
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Je pense que cela provient du fait que si tu crée tes textbox à la volée, lorsque le postback est effectué, tes textbox n'existent pas encore. Et lorsque l'appel de ton textchanged se fait il ne retrouve pas ses textbox.
    Il faudrait que tu nous montres ton code behind pour être vraiment sur.

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    je pensais aux valeurs du textboxs en fait. Elles ne sont pas présentes malgré enableviewstate?

  9. #9
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    J'ai essayé de nettoyer le code pour qu'il vous montre l'essentiel

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    public class CPQuestionnaire : System.Web.UI.UserControl
    	{
    		protected System.Web.UI.WebControls.Button bValider;
    		protected System.Web.UI.HtmlControls.HtmlForm form;
    		protected System.Web.UI.WebControls.RadioButtonList typeQuestion;
    		protected System.Web.UI.WebControls.TextBox tQuestion;
    		protected System.Web.UI.WebControls.Repeater questionnaire;
    		protected System.Web.UI.WebControls.Label lQuestion;
    		protected System.Web.UI.WebControls.PlaceHolder hReponses;
    		protected System.Web.UI.WebControls.Button bAjouter;
    		protected System.Web.UI.WebControls.Button bSubmit;
    		protected System.Web.UI.WebControls.Button bAnnuler;
    		protected static ArrayList reponses;
     
    		const int OUVERTE_COURTE = 0;
    		const int OUVERTE_LONGUE = 1;
    		const int CHOIX_MULTIPLE = 2;
    		const int CHOIX_UNIQUE = 3;
    		const int CHAMP_DATE = 4;
     
     
     
    		public void AjouterReponse(object sender, System.EventArgs e)
    		{
    			TextBox reponse = new TextBox();
    			reponse.ID = "reponse" + (reponses.Count + 1);
    			reponse.Columns = 50;
    			reponse.EnableViewState = true;
                            reponse.TextChanged += new EventHandler(ReponseSaisie);
    			reponses.Add(reponse);
     
    			ChargementReponses();
    		}
     
     
    		public void ChargementReponses()
    		{
    			if (reponses == null)
    				reponses = new ArrayList();
     
    			for(int i=0; i<reponses.Count; i++)
    			{
    				hReponses.Controls.Add(new LiteralControl("<tr><td>"));
    				hReponses.Controls.Add(new LiteralControl("<span>Réponse " + (i+1) + " "));
    				hReponses.Controls.Add(new LiteralControl("</td><td>"));
    				hReponses.Controls.Add((TextBox)reponses[i]);
    				hReponses.Controls.Add(new LiteralControl("</td></tr>"));
    			}
    		}
     
     
    		public void ReponseSaisie(object sender, System.EventArgs e)
    		{
    			Response.Write("<body><script>alert(\"Paasage dans reponseSaisie " +"\");</script></body>");
     
     
     
    		}
     
    		public void Page_Load(object sender, System.EventArgs e)
    		{
     
    		}
     
    	}
    }

  10. #10
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Si les controles sont crées a la volée sur un evenement onclick par exemple, ils seront reconstruit avec un enableviewstate=true sur la page?
    (Question pour rattlehead)

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Tu ne peux pas placer ton ArrayList en static, ou tu va avoir de grOs problemes ;-)

  12. #12
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    si l'arraylist n'est pas en static elle est resetée à chaque fois que je clique sur un bouton puisque la page est rechargée

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Essaye de lancer simultanément ta page sous 2 navig différents, tu comprendra ce que je veux dire ;-)

  14. #14
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    je suis tout a fait d'accord avec toi : a vrai dire, je suis conscient du probleme et ai mis ça dans le but de resoudra mon premier probleme

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    J'ai fais ce truc la en speed pour nimois30 si tu veux t'en inspirer... Mais je te préviens : c'est ULTRA BOURRIN...

    Ya vraiment mieux (plus délicat quoi..)

    Lui devait générer un nombre de textbox rentrer dans une textbox, puis ensuite si on modifiait un text, changer les textbox suivante (pas les précédentes)
    Je voulais pas trop me gonfler a chercher ensuite quel control correspondait a tel id pour ensuite chercher les suivant et les modifier...
    bref j'ai fait du "on efface tout et on recommence"


    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
     
    <%@ Page Language="C#" AutoEventWireup="true" Codebehind="WebForm1.aspx.cs" Inherits="test.WebForm1" %>
     
    <%@ Register Assembly="test" Namespace="test" TagPrefix="cc1" %>
     
    <!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="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox><br />
     
            </div>
        </form>
    </body>
    </html>

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
     
    namespace test
    {
        public static class HistoriqueWebForm1
        {
            public static List<TextBox> TextBoxCollection
            {
                get 
                {
                    return (List<TextBox>)HttpContext.Current.Session["TextBoxCollection"]; 
                }
                set
                {
                    HttpContext.Current.Session["TextBoxCollection"] = value;
                }
            }
     
        }
        public partial class WebForm1 : System.Web.UI.Page
        {
     
            protected void Page_Load( object sender, EventArgs e )
            {
                AddTextBox( HistoriqueWebForm1.TextBoxCollection );
            }
     
            protected void TextBox1_TextChanged( object sender, EventArgs e )
            {
                List<TextBox> TxBxColl = HistoriqueWebForm1.TextBoxCollection;
                this.RemoveTextBox( TxBxColl );
     
                try
                {
                    int iNbtxtBx;
                    if ( Int32.TryParse( ( (TextBox)( sender ) ).Text, out iNbtxtBx ) )
                    {
                        TxBxColl.Clear();
                        for ( int i = 0; i < iNbtxtBx; ++i )
                        {
                            TextBox kTxBx = new TextBox();
                            kTxBx.ID = "TextBox_" + i.ToString();
                            kTxBx.Text = "Heure n° " + i.ToString();
                            kTxBx.Height = 30;
                            kTxBx.Width = 500;
                            kTxBx.Visible = true;
                            kTxBx.Enabled = true;
                            kTxBx.AutoPostBack = true;
     
                            TxBxColl.Add( kTxBx );
     
                        }
                        HistoriqueWebForm1.TextBoxCollection = TxBxColl;
                        AddTextBox( TxBxColl );
                    }
     
                }
                catch ( Exception exc )
                {
                    Debug.WriteLine( "ERROR : " + exc );
                }
            }
     
            protected void TextBoxPhrase_TextChanged( object sender, EventArgs e )
            {
                List<TextBox> TxBxColl = HistoriqueWebForm1.TextBoxCollection;
                this.RemoveTextBox( TxBxColl );
     
                TextBox kTxBx = ( (TextBox)( sender ) );
                int iStart = TxBxColl.IndexOf( kTxBx );
                for ( int i = iStart; i < TxBxColl.Count; ++i )
                {
                    TxBxColl[i].Text = kTxBx.Text;
                }
                HistoriqueWebForm1.TextBoxCollection = TxBxColl;
                AddTextBox( TxBxColl );
            }
     
            protected void AddTextBox( IList<TextBox> TextBoxList )
            {
                IEnumerator kEnumerator = TextBoxList.GetEnumerator();
                TextBox kTxBx;
                while ( kEnumerator.MoveNext() )
                {
                    kTxBx = ( (TextBox)( kEnumerator.Current ) );
                    kTxBx.TextChanged += new EventHandler( this.TextBoxPhrase_TextChanged );
                    this.form1.Controls.Add( kTxBx );
                }
            }
     
            protected void RemoveTextBox( IList<TextBox> TextBoxList )
            {
                IEnumerator kEnumerator = TextBoxList.GetEnumerator();
                while ( kEnumerator.MoveNext() )
                {
                    this.form1.Controls.Remove( ( (TextBox)( kEnumerator.Current ) ) );
                }
            }
        }
    }
    dans le globalasax il y ceci aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void Session_Start( Object sender, EventArgs e )
            {
    HistoriqueWebForm1.TextBoxCollection = new System.Collections.Generic.List<TextBox>();
    }

  16. #16
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    reponse à Arthis.
    Si tu initialises tes controls avec EnableViewstate à true ca devrait le faire je pense.

    Pourquoi tu n'utilises pas le cache pour stocker les valeurs de tes textbox et tu les rappelles dans le page_load de ta page.

  17. #17
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Mon probleme est que lorsque je clique sur un bouton, la page est rechargée avant que la methode chargée de traiter l'evenement clic sur le bouton n'intervienne. Du coup, je me retrouve sans mes textbox.
    C'est pour cela qu'il m'était venu à l'idee d'utiliser l'evenement textchanged pour prendre en compte les changement dès l'edition d'une textbox, sans plus de reussite

  18. #18
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    utilise peut etre l'évenement oninit de tes textboxs.

  19. #19
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    l'evenement oninit est je suppose appelé au debut de la vie de la textbox, que dois-je y faire ? ne serait-ce pas plutot juste avant qu'elles ne soient detruite ?

  20. #20
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    Résumons. tu ajoutes dynamiquement des textboxs à un contentplaceholder. tu sais des données. tu veux les valider un truc dans ce genre là. une fois la validation terminé tes textboxs ne sont plus là ou les valeurs de tes textbox ont disparu, c'est ça?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Batch] Cscript qui lance plink (ssh) : ne se termine jamais
    Par lmdmf dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 27/11/2012, 18h06
  2. galère depuis 3h : pourquoi ma fonction ne se lance jamais ?
    Par sadkat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2008, 14h45
  3. [C#] Evenement TextChanged lancé que sur changement de l'utilisateur
    Par etiennegaloup dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2006, 13h16
  4. [Servlet] Servlet qui ne se lance jamais
    Par Shiryu44 dans le forum Servlets/JSP
    Réponses: 23
    Dernier message: 31/03/2005, 15h41
  5. Fermer l'animation (swf/exe lancé depuis Windows)
    Par ZiZouJH dans le forum Flash
    Réponses: 3
    Dernier message: 14/01/2003, 10h00

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