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 :

DropDownList dynamiques et AJAX UpdatePanel


Sujet :

ASP.NET

  1. #1
    Courgette17
    Invité(e)
    Par défaut DropDownList dynamiques et AJAX UpdatePanel
    J'ai créé des dropdownlist dynamiquement dans un tableau. Elles s'affichent normalement à chaque enregistrement dans la table de ma bdd. Et quand je change leur numéro (de 1 à 100) ça me change les sous totaux et prix total de mon panier. J'utilise donc un AddHandler et ensuite une fonction drop1_SelectedIndexChanged et toutes les dropdownlist créées automatiquement sont en autopostback = true.

    Jusque la pas de problème. Sauf que j'aimerais me débarrasser du rafraichissement de toute la page à chaque fois que je change de valeur. J'aimerais que l'on voit juste les valeurs à coté se mettre à jour en fonction du nouveau numéro choisi dans la dropdownlist.

    J'ai donc essayé de mettre un updatepanel (en plus du scriptmanager) et de mettre mon tableau avec tous les prix, dropdown... tout ça à l'intérieur de l'updatepanel mais cela ne change rien. Cela rafraichit toujours toute la page dès que je change une valeur.
    J'ai essayé de changer les conditions de démarrage de l'update panel comme par exemple faire en sorte qu'il update pour les dropdownlist mais comme elles sont créées dynamiquement, il ne les reconnait pas.

    Que puis je faire pour faire fonctionner cette partie de mon application?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Es-tu sûr que les ddl que tu crées dynamiquement se trouvent bien à l'intérieur de ton updatePanel?

  3. #3
    Courgette17
    Invité(e)
    Par défaut
    >_> <_< /me vérifie


    Oui en effet, c'est bien dans le updatepanel

    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
     
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
     <asp:Table ID="Table1" runat="server" GridLines="Both">
            <asp:TableRow runat="server">
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Marque</asp:TableCell>
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Description du produit</asp:TableCell>
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Prix unitaire en euros</asp:TableCell>
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Quantité</asp:TableCell>
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Prix total en euros</asp:TableCell>
                <asp:TableCell runat="server" Font-Bold="True" Font-Underline="True">Supprimer</asp:TableCell>
            </asp:TableRow>
        </asp:Table>
     
            </ContentTemplate>
        </asp:UpdatePanel>
    (J'ai bien sur coupé volontairement du code dans ce que je montre)

    Et c'est dans ce tableau que j'ajoute mes drop down list dans la colonne quantité en codebehind

    J'ai même vérifié dans le code source dans le navigateur et la div updatepanel s'arrête bien après le tableau.


    Et puis dans le codebehind j'ajoute à ce tableau strictement ce qu'il me faut. Donc je vois pas.

    Est-ce que cela peut poser probleme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    quantite2 = New DropDownList
    quantite2.AutoPostBack = True
    AddHandler quantite2.SelectedIndexChanged, AddressOf quantite2_SelectedIndexChanged

  4. #4
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    heu, juste comme ça, il manquerait pas un triggers dans ton updatepanel ?

    Tel que tu présente le code, tu vas rafraichir jsute ton tableau, si j'ai bien compris ton exposé, c'est ce que tu veux. Mais il faut que tu mette un trigger pour dire que cela se déclenche sur la selection d'une nouvelle Value dans la DDL.

  5. #5
    Courgette17
    Invité(e)
    Par défaut
    Et comment tu l'indiques en codebehind?

    UpdatePanel.Trigger? Puis quoi ensuite?

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par zooffy Voir le message
    heu, juste comme ça, il manquerait pas un triggers dans ton updatepanel ?

    Tel que tu présente le code, tu vas rafraichir jsute ton tableau, si j'ai bien compris ton exposé, c'est ce que tu veux. Mais il faut que tu mette un trigger pour dire que cela se déclenche sur la selection d'une nouvelle Value dans la DDL.
    Si les dropdownlist sont à l'intérieur de l'updatepanel, faut juste un autopostback = true, pas besoin de trigger il me semble

  7. #7
    Courgette17
    Invité(e)
    Par défaut
    J'ai essayé dans une autre page en mettant le updatepanel de façon à ce qu'il englobe un autre tableau ou le contenu est généré dynamiquement mais les boutons de ce tableau font eux aussi le refresh de toute la page.

    C'est normal que IE me dise qu'il y a des erreurs javascript dans les pages ou je mets l'updatepanel et le scriptmanager? Il me dit que sys est pas défini à cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        <script type="text/javascript">
    //<![CDATA[
    Sys.WebForms.PageRequestManager._initialize('ctl00$contenu$ScriptManager1', document.getElementById('aspnetForm'));
    Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tctl00$contenu$UpdatePanel1'], [], [], 90);
    //]]>
    </script>
    et ici:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sys.Application.initialize();
    L'erreur est dans le code interprété, pas dans le code que j'ai mis moi meme, donc c'est ce que le serveur envoie.

  8. #8
    Courgette17
    Invité(e)
    Par défaut
    Bon j'ai encore trouvé réponse à mon problème tout seul, mais je vous remercie beaucoup pour vos pistes. Pour les gens qui feront la même connerie que moi, il ne faut pas oublier d'ajouter dans le web.config (pour l'ajax):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <system.web>
    <httpHandlers>
          <remove verb="*" path="*.asmx"/>
          <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
        </httpHandlers>
        <httpModules>
          <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>
    </system.web>
    Et voila et il n'y a même plus d'erreur javascript dans IE (c'est ça qui m'a aidé a trouver).

    Tain je ne savais pas que l'updatepanel ça marchait si facilement et sans rien demander ailleurs, j'étais persuadé qu'il me fallait autre chose.


    Au passage j'ai découvert que pour changer mes asp:button en type button au lieu de submit il faut désactiver la propriété de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton.usesubmitbehavior = false

  9. #9
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Et oui, l'AJAX.NET ça marche du feu de dieu, et encore, t'as pas essayé les webcontroltoolkit

    Donc si ta config est bonne il n'y a pas de souci, mais normalement ça s'intalle tout seul si tu suis bien la procédure fournie sur le site asp.net.

    Pour les histoires de Trigger (désolé de n'avoir pas pu répondre plus tôt) il ne faut pas oublié de faire des PostBack sur les contrôles déclencheurs (le bouton l'a automatiquement, mais pas la DDL). Ensuite il faut mettre une Trigger asynchrone sur le controle et sur l'évènement du contrôle concerné.
    Par exemple il serait possible de déclencher un traitement sur le survol d'un bouton et pas forcément sur un click.

    Pour l'ajout par CodeBehind, c'est tout aussi simple, il faut jsute faire bien gaffe entre la partie CodeHTML et CodeBehind. Moi j'ai pris l'option de tout faire dans le CodeBehind lrosque je le fais. Je mets juste une PlaceHolder dans le CodeHTML et j'ajoute le UpdatePanel dedans par CodeBehind.

    Mais il en faut pas oublier les objets, les envoyer dans le bon ordre. Et puis les autres contrôles, genre une DDL, lorsqu'elle est crée aussi par CodeBehind il faut lui faire une AddHandler super propre.

    Voilà MadMarc52, j'espère avoir pu t'aider une poil à postériori. Si tu as d'aure question, vas y, je suis en plein les updatepanel, alors j'aurais peut être les mêms souci que toi, avec un poil d'avance.

Discussions similaires

  1. Ajax Popup avec Dropdownlist dynamique
    Par Nonos421 dans le forum ASP.NET Ajax
    Réponses: 2
    Dernier message: 12/05/2011, 08h15
  2. [AJAX] Affichage dynamique en AJAX
    Par damdam94 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/12/2006, 19h24
  3. Charger une liste dynamiquement avec AJAX
    Par macra dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/10/2006, 21h39
  4. Réponses: 3
    Dernier message: 20/06/2006, 09h07
  5. Régénérer des dropdownlist dynamiques
    Par torper dans le forum ASP
    Réponses: 2
    Dernier message: 25/04/2006, 15h49

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