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 :

[VB.NET] controle utilisateur perte de donnée, au secours !!


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    Citation Envoyé par Maniak
    Les évènements des contrôles eux-mêmes sont de toute façon lancés après l'évènement Load. Si tu veux voir les données concernées par chaque contrôle après chargement du viewstate et exécution des éventuels évènements, essaye du côté de OnPreRender. À ce moment-là, c'est sûr, tout est initialisé, chargé et exécuté
    Attention qd je dis que je teste les valeurs prises par le controles de mon webusercontrol, je parle du load ce dernier et pas de la page contenante C'est pourquoi je capte pas comment est-ce possible que dans le load de mon webusercontrol, le textbox.text = "", alors qu'à l'affichage, j'ai bien textbox.text = "ma saisie"

  2. #2
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    nnnnnnnnnnnaaaaaaaaaaannnnnnnnn sphax me laisse pas tomber


    lol

    j'essaie les variables de session, j'avoue qu'avec tous les tests j'avais oublié cette proposition ci.

    pardon, pardon :

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ok ok je laisse pas tomber , me suis un peu enervé aussi.

    Sinon je viens de remarquer que tu avais ecris :

    sachant que j'ai enlevé le Me.ChargeFormulaire() du DDL_Type_Courrier_SelectedIndexChanged et comme ce na marchait pas plus (eh oui !!!!) et bien j'ai remis mon code à son état initial
    Il ne faut pas l'enlever ! Sinon ça ne marchera plus la premiere fois, quand l'utilisateur selectionne qque chose dans ta dropDownList. Par contre tu vas avoir droit a d'autres problemes : si l'utilisateur change plusieurs fois la veleur de cette DropDownList, il va falloir gerer ce qui se passe

  4. #4
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    alors voilà ce que j'ai fais, j'espère que c'est à ça que tu pensais .... pas taper

    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
    ' Permet de charger les formulaires de saisie
        Private Sub ChargeFormulaire()
            ' Si un type a bien été choisi et qu'aucun formulaire n'a été chargé
            If VarSession.Mailing.FormulaireEnvoi <> 0 Then
                If PH_Envoi.Controls.Count <> 0 Then
                    PH_Envoi.Controls.RemoveAt(0)
                End If
                ' Si le type de courrier choisi est : courrier ou fax
                If VarSession.Mailing.FormulaireEnvoi = Constantes.Courrier Or VarSession.Mailing.FormulaireEnvoi = Constantes.Fax Then
                    ' On charge le formulaire de saisie d'un courrier papier
                    MPapier = CType(LoadControl("MailingPapier.ascx"), MailingPapier)
                    MPapier.TypeCourrier = VarSession.Mailing.FormulaireEnvoi
                    MPapier.EnableViewState = False
                    PH_Envoi.Controls.Add(MPapier)
                Else
                    ' Sinon on charge le formulaire de saisie d'un courrier électronique
                    MEmail = CType(LoadControl("MailingEmail.ascx"), MailingEmail)
                    'MEmail.EnableViewState = False
                    PH_Envoi.Controls.Add(MEmail)
                End If
            End If
        End Sub
     
    [...]
     
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
            'Ne le modifiez pas en utilisant l'éditeur de code.
            InitializeComponent()
     
            ' Chargement du formulaire de saisie du courrier
            Me.ChargeFormulaire()
     
        End Sub
     
    [...]
     
     ' Evènement lié au choix d'un type de courrier
        Private Sub DDL_Type_Courrier_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DDL_Type_Courrier.SelectedIndexChanged
     
            ' Si un type a bien été choisi
            If DDL_Type_Courrier.SelectedValue <> "-1" Then
                VarSession.Mailing.FormulaireEnvoi = Convert.ToInt32(DDL_Type_Courrier.SelectedValue)
                ' On lance le chargement du formulaire correspondant
                Me.ChargeFormulaire()
            End If
     
            ' On vide les variables de session
            Me.VideSession()
     
     
        End Sub
     
    [...]
    et bah ca marche toujours pas : le pageload de mon webusercontrol donne toujours des valeurs à nulles, alors que l'affichage est bon

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Oui c'est bien ce a quoi je pensais. Par contre je comprends pas ça :

    Si tu effaces ta valeur en session juste aprés l'avoir créée, c'est étrange.

    Et VarSession.Mailing.FormulaireEnvoi c'est bien qque chose que tu stockes en session hein ? (je sais je sais, t'es pas blonde, mais je prefere m'en assurer :p )

    Je ne comprends pas ça non plus :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PH_Envoi.Controls.RemoveAt(0)
    Pourquoi tu enleves un controle ?? Normalement tu n'as pas à faire ça, a moins que je n'ai pas tout compris.



    Dernier point, tu as debuggué ? Dans le page_init tout se passe comme prévu ?

    EDIT : reformulation de mes remarques

  6. #6
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    Citation Envoyé par Sphax

    Si tu effaces ta valeur en session juste aprés l'avoir créée, c'est étrange.
    rien à voir, ca concerne d'autres variables de session

    Citation Envoyé par Sphax
    Et VarSession.Mailing.FormulaireEnvoi c'est bien qque chose que tu stockes en session hein ? (je sais je sais, t'es pas blonde, mais je prefere m'en assurer :p )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     ' Varaibles de session du mailing
        Public Shared Property Mailing() As SESSION_Mailing
            Get
                Return CType(HttpContext.Current.Session("Mailing"), SESSION_Mailing)
            End Get
            Set(ByVal value As SESSION_Mailing)
                HttpContext.Current.Session("Mailing") = value
            End Set
        End Property
    ca te va ?

    Citation Envoyé par Sphax
    Pourquoi tu enleves un controle ?? Normalement tu n'as pas à faire ça, a moins que je n'ai pas tout compris.
    bah si je fais pas ca, au changement de sélection, je pense que les formulaires vont s'additionner plutot que de se remplacer (je vais vérifier, mais je crois )



    Citation Envoyé par Sphax
    Dernier point, tu as debuggué ? Dans le page_init tout se passe comme prévu ?
    oui

  7. #7
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    Citation Envoyé par lucie.houel
    bah si je fais pas ca, au changement de sélection, je pense que les formulaires vont s'additionner plutot que de se remplacer (je vais vérifier, mais je crois )
    je confirme

    par contre ce que je comprends pas avec ce qu'on est en train de faire c'est que même avec les variables de session, dans le page init c'est le formulaire de la sélection précédente qui est chargé et le formulaire de la sélection courrante, c'est dans le DDL_Type_Courrier_SelectedIndexChanged qu'il change, moi je reviens pas dans le pageInit après

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Oula , c'est un peu étrange tout ça, et j'ai un peu de mal a comprendre ce qui se passe. Ecoute j'essaye de faire un petit projet qui mime ce que tu fais, si j'arrive a qque chose, je te l'enverrai par mail

  9. #9
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    ouh bah ca ca serait génial

    merci beaucoup pour ton aide.

    ce qui t'étonne c'est que je repasse pas par le Init ?

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Normalement le page_init tu dois y passer à chaque post back, en tout premier. c'est bien ce qui se passe ?

  11. #11
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    bah qd je choisis un type de mailing(courrier, fax, mail) il passe dans le init, puis dans DDL_Type_Courrier_SelectedIndexChanged.

    du coup, exemple :

    1) je choisis mail

    init : la variable de session est vide, rien n'est chargé
    DDL_Type_Courrier_SelectedIndexChanged : la variable de session = mail, le formulaire mail est chargé

    2) je choisis fax

    init : la variable de session = mail, le formulaire mail est chargé
    DDL_Type_Courrier_SelectedIndexChanged : la variable de session = fax, le formulaire mail est fax

    mais comme je le disais, du coup dans le init c'est pas le bon formulaire qui est chargé :

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ah ok, mais c'est normal ça. dans le init c'est le formulaire d'avant qui est chargé, mais c'est cohérent, et il faudra attendre de passer dans le ddl_index_changed pour recharger le "bon" controle. par contre pour tout autre postBack ta page fonctionnera correctement, en particulier si tu as un bouton "sauver" ou "envoyer par mail" ou n'importe quoi, et c'est ce qui compte . Et surtout, dans le page_load normalement tes controles ont bien leurs valeurs !

    Le petit projet que j'ai fait (regarde tes mp) fonctionne exactement comme ça.

    PS : tu as raison pour le PlaceHolder.RemoveAt.

  13. #13
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    Citation Envoyé par Sphax
    PS : tu as raison pour le PlaceHolder.RemoveAt.
    je me sens moins con

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    J'ai jamais dit que t'etais con hein, ya eu une petite incomprehension mutuelle a un moment donné, c'est tout . Pour le PlaceHolder.RemoveAt effectivement je n'avais pas vu le soucis arriver avant de faire le test moi meme , mais c'est souvent comme ça.

  15. #15
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    salut,

    bon alors je suis en train de regarder ce que tu m'as envoyé, ce qui me chagrine, c'est que la première saisie, juste après le changement de control n'est pas prise en compte

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Sphax
    Le probleme c'est quelle a des controles à charger dynamiquement et que le preRender c'est bien trop tard pour le faire à mon avis.
    Ça oui, c'est trop tard :)
    Masi par contre pour le coup de la valeur de la textbox qui n'est pas encore à jour dans le Load mais qui l'est une fois arrivé à l'affichage, a priori c'est ça le problème. L'évènement (de la textbox) qui provoque la mise à jour de la valeur se lance après le Load.

    Maintenant ça ne fait pas avancer le problème. Récupérer dans l'Init la valeur d'un contrôle qui n'est chargée qu'après le Load (à la sélection) ou après le LoadViewState (postbacks suivants), c'est pas gagné. La seule 'solution' que je connaisse pour gérer ce genre d'embrouille, c'est de bidouiller avec la session, mais dans le cas présent, à part stocker la valeur en session la première fois (dans l'évènement correspondant), puis recharger la page pour pouvoir la choper dans l'Init, je vois pas :)

    Enfin si, mais dégager les webforms, le viewstate et passer ses paramètres soi-même 'à l'ancienne' pour y avoir accès n'importe quand y compris dans l'Init, c'est le mieux, mais c'est peut-être un trop gros morceau :)

  17. #17
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    bah la solution des variables de session, on est dessus avec sphax, le pblm c'est que même avec ca, de mon côté, je récupère pas les valeurs saisies dans le load. Alors Sphax m'a envoyé un exemple, là le pblm c'est que tout se passe bien (dans le load et à l'affichage) mais au bout du deuxième postback, c'est à dire qu'au premier postback, la valeur saisie disparait et c'est tout

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    C'est à dire ? Chez moi ça a l'air de bien marcher :

    1) tu lances le projet, tu changes la valeur de la dropDownList, le controle est chargé
    2) tu saisis qque chose dans la textBox, mettons "truc" et tu cliques sur le bouton, alors "truc" s'affiche dans le label.


    C'est pas ce que tu obtiens ?

    EDIT : pour Maniak, lol, je suppose que tu n'as pas eu le courage de tout lire, mais ça fait bien deux pages qu'on a parlé de la session pour stocker ces valeurs afin de les recupérer dans l'init

  19. #19
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 270
    Par défaut
    alors d'accord pour le début, mais apres :

    1) tu lances le projet, tu changes la valeur de la dropDownList, le controle est chargé
    2) tu saisis qque chose dans la textBox, mettons "truc" et tu cliques sur le bouton, alors "truc" s'affiche dans le label.
    3) tu changes la valeur de la dropDownList, le controle est chargé
    4) tu saisis qque chose dans la textBox, mettons "bidule" et tu cliques sur le bouton, alors "bidule" disparait de ton textbox et ne s'affiche pas

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ok, je crois avoir trouvé . Apparemment asp.net s'emmele les pinceaux avec les ID des controles. Si tu as jeté un oeil au lien que je t'ai donné hier sur les evenements d'une page, tu retrouves :

    1) Page_Init : c'est la que tu dois charger tes controles dynamiques
    2) LoadViewState : asp.net renseigne tous les controles avec les valeurs du viewstate (les valeurs du coup d'avant en gros)
    3) LoadPostData : asp.net renseigne les controles avec les VRAIES valeurs nouvellement saisies par l'utilisateur, c'est la que ça bug vu qu'au deuxieme changement de dropDownList tu perds ta valeur. Et pour ça, remplir les controles, il se base sur leurs ID, et j'ai l'impression que lors du chargement des controles il change les ID...

    J'ai donc essayer de mettre en dur l'id du controle chargé dynamiquement, et ça a l'air de fonctionner ! Je t'envoie le fichier modifié, essaye ça

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/02/2011, 14h11
  2. Perte de données Vb.net-access?
    Par Mario Rousson dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/12/2010, 23h22
  3. Probleme de passage de donnée dans un control utilisateur
    Par Luciol44 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/03/2010, 12h44
  4. [Remoting VB.NET 1.1] Perte de données
    Par BalBalNet dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 26/01/2007, 16h16
  5. [VB.Net] Regrouper des controles utilisateurs
    Par Jsh dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/04/2006, 13h39

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