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 :

Contrôle créés dynamiquement - récupération de valeurs


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut Contrôle créés dynamiquement - récupération de valeurs
    Bonjour,

    Nous sommes face à un problème de postback... Nous créons dynamiquement des Tabs dans un Tabcontainer présent sur la page, dans lesquels nous insérons des contrôles ascx (du coup dynamiquement) et dans lesquels nous créons un repeater.
    Tout cela au chargement de la page en !PostBack ou dans le code behind d'un événement de combo.
    Dans ce repeater, l'utilisateur doit saisir des valeurs que nous souhaitons récupérer (pour enregistrer en base de données ou peu importe...)
    Le problème est que, lorsque nous cliquons sur un bouton présent dans un ascx (créé dynamiquement), nous perdons toutes nos valeurs saisies dans le repeater..

    --------
    Pas à pas :
    - ascx 1 "statique" : contient le tabcontainer. création dynamique des tabs dans la page load en !postback
    - tab 1 "dynamique" : contient des contrôles + l'ascx 2
    - ascx 2 "dynamique" : contient des contrôles + l'ascx 3
    - ascx 3 "dynamique" : contient des contrôles + le repeater
    Si on saisit des valeurs dans le repeater, on provoque un rechargement de la page qui remet le tabcontainer de l'ascx 1 à 0. Le viewstate ne change rien.


    Suis je claire? Quelqu'un aurait-il déjà rencontré ce problème?
    Merci

  2. #2
    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
    Les viewstate est "mappé" avec les contrôles serveurs après l'évènement init et avant l'évènement load de page. Si tu insères des contrôles dynamiquement dans une page, il faut impérativement le faire dans l'évènement init de la page.

  3. #3
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    Le viewstate ne change rien.
    Vue ton scénario, le viewState n'a jamais entré en jeux . Moi, je te conseil de basculer la création dynamique de ton repeater vers l’événement Page_Init.

    A+

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Ok merci de votre aide, je teste et donne des news rapidement.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Alors en reregardant le code, je me suis rendu compte qu'on n'appelle jamais la méthode de création des contrôles dynamiques (appelons la LoadPanel()) à partir du Load de la page.
    Elle est toujours appelée à la suite du code d'un événement.
    Exemple :
    La page contient plusieurs ascx. Je fais une sélection dans une combo de mon ascx 0, ça exécute mon code + appel à ascx1.LoadPanel(), qui fait toute la routine de création dynamique.
    J'ai en fait besoin de passer par le code de la combo pour initialiser des valeurs utilisées dans la méthode LoadPanel. Si je la mets ds le Init, ou le Load, il va se retrouver avec les mauvaises valeurs...
    Ou alors je dois revoir toute la logique de mon rafraîchissement.
    Mais je reste persuadée que je rencontrerai le même problème après avoir changé cette logique...
    Je regarde ça et vous tiens au courant, sauf si vous avez une idée sans que j'ai besoin de changer ce code.
    Merci..

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Donc effectivement, en mettant les traitements dans les Page_Init, ça fonctionne. Merci des pistes que vous m'avez fournies
    Pour ceux qui chercheraient un peu + de détails sur la résolution de notre problème :
    ------
    * Page asp principale :
    Gestion de l'événement PreInit (dans la balise <%@ Page OnPreInit="EvtPreInit">
    - initialisation des listes et variables utilisées dans les ascx inclus dans la page

    * ascx 1 (statique) :
    Celui là fait appel à partir d'un événement à la création dynamique des contrôles
    - Page_Init : si !postback, on fait nos initialisations + appel à la méthode de création dynamique (LoadPanel())

    * ascx 2 (statique) :
    Celui là contient le TabContainer, dont les panels sont créés dynamiquement
    - le TabContainer est dans un UpdatePanel :
    . UpdateMode="Conditional"
    . ChildrenAsTriggers="true"
    . EnableViewState="true"
    - le TabContainer :
    . EnableViewState="true"
    - Page_Init :
    . si !postback, on fait nos initialisations
    . on ne gère pas le postback s'il est à true
    - Page_Load :
    . on ne gère pas le postback s'il est à false
    . si postback, on appelle notre LoadPanel()


    Je pense qu'une partie de la gestion des postback est propre à notre application, mais le plus gros de la solution est là.
    J'aimerais bien avoir un retour sur ce post si quelqu'un tente cette solution et que ça ne fonctionne pas.

    Merci encore à ceux qui m'ont aidée.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/12/2014, 13h16
  2. Réponses: 1
    Dernier message: 14/04/2011, 16h07
  3. Garder contrôles créés dynamiquement
    Par roshy dans le forum ASP.NET
    Réponses: 5
    Dernier message: 06/07/2010, 14h13
  4. Accès à des contrôles créés dynamiquement
    Par sphynxounet dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/08/2009, 20h34
  5. Gerer les evenements de Contrôles créés dynamiquement
    Par celineSGH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2008, 02h25

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