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 :

Ajax.NET : gros problème


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut Ajax.NET : gros problème
    Bonjour,
    depuis hier j'essaie de faire marcher l'updatepanel, mais j'ai un comportement bizarre.
    Le principe est simple, dans un gridview, j'ai des liens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:HyperLink id="HyperLink5" runat="server" Text='<%# Eval("NB") %>' Forecolor="black" NavigateUrl="#" onMouseOver='<%# Eval("ID_ANO", "javascript: montre({0})") %>' onMouseOut="javascript: cache()" onClientClick="javascript:return false;"></asp:HyperLink>
    Le but est lors du survol des liens, affiché des détails sur la ligne concerné.
    La fonction montre est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function montre(id) {
        var elt = document.getElementById('ctl00_ContentPlaceHolder1_popBox');
        elt.style.display = "block";
        document.getElementById('ctl00_ContentPlaceHolder1_TextBoxUpdate').value = id;
        document.getElementById('ctl00_ContentPlaceHolder1_ButtonUpdate').click();
    }
    Et mon updatepanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ButtonUpdate" />
            </Triggers>
            <ContentTemplate>
                 <asp:Button ID="ButtonUpdate" runat="server" Text="titi"/>
                 <asp:TextBox ID="TextBoxUpdate" runat=server ></asp:TextBox>
                 <div runat="server" id="popBox" style="background-color:White; position: absolute; display:none; ">
                    toto
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    Et enfin, coté serveur, j'éxécute ma requete puis mets à jour popBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void UpdatePanel1_Load(object sender, EventArgs e)
        {
            //requet sql
     
            popBox.InnerHtml = "<table border=1 bordercolor=\"#000\"><tr><td>Date souhaitée</td><td>Date proposée intégrateur</td><td>Date de MAJ</td></tr>";
            popBox.InnerHtml += // données de la bdd    
    }
    Donc quand je survole un lien, la valeur du textbox prend bien l'id, et la requete est faite en async. Mais j'ai maintenant l'erreur : sys.webforms.pagesrequestmanagerparsererrorexception.
    J'ai déjà fait des recherches dessus, et je ne suis pas dans les cas cité, je n'ai pas activé la trace, et je ne fais pas de response.write...

    Le code behind, en le mettant directement dans le pageload de la page plutot que de l'updatepanel, j'obtiens bien des données, mais toujours de l'id précédent sélectionné... Pas celui sur lequel je suis actuellement.

    De plus, autre probleme, la page ou je suis est tres grosse, et du coup cela met plusieurs secondes pour mafficher mon résultat alors que la requete et les données supplémentaires à afficher sont tres légères...


    Donc voila, est ce que c'est moi qui utilise mal les possibilités AJAX du .NET ou c'est vraiment mal foutu ?

  2. #2
    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
    Désolé de te dire ça, mais tout cela n'est pas très propre :

    1 :
    Tu fabriques ton javascript avec le idclient codé en dur : si tu rajoutes un seul panel parent, tout est foutu en l'air... (ou une master page)
    Il faut que tu fabriques ton javascript dynamiquement en appliquant la propriété "ClientId" de tes Controls...


    2 : Pareil pour l'histoire du popbox, remplir le InnerHtml à la main c'est pas joli joli... Regardes plutot du coté des Repeaters...


    Fait un essai très simple ou tu cliques normalement sur le lien pour afficher une simple pauvre liste texte de tes champs... Dans une page vierge de tout le reste. (simplifie au maximum pour valider ton traitement et uniquement lui)

    Regarde du coté d'AjaxControlToolkit, il y a peut être des trucs qui peuvent t'aider...


    Simple question à deux sous, mais comme tout le monde répond "non"... :
    Tu as bien installé Visual Studio 2005 SP1 (si t'es pas en 2008) avant d'installer ASP.NET AJAX?

    Au fait, pourquoi tu as un trigger sur ton Bouton alors qu'il fait partie de l'update panel? Les triggers c'est pour les controls placés à l'extérieur de l'UpdatePanel...

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    Ok, merci de ta réponse, j'en prends note.
    Effectivement pour les id je vais regarder ca pour que ca soit plus propre
    (par contre j'ai bien une masterpage mais cela fonctionne quand meme).

    Je teste pour le repeater et je te dis ca.

    Sinon oui j'ai bien installé visual studio 2005 avant l'ajax toolkit.

    Et je vais supprimer le trigger

    Merci pour ta réponse en tout cas, si vous avez d'autres remarques, n'hésitez pas.

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    J'ai donc fait les modifs, c'est déjà plus propre. Plus de trigger inutil, et plutot que de remplir le div manuellement, j'ai utilisé un gridview(finalement encore plus adapté que le repeater, j'y avais pas pensé... ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                 <asp:Button ID="ButtonUpdate" runat="server" Text="titi"/>
                 <asp:TextBox ID="TextBoxUpdate" runat=server ></asp:TextBox>
                 <div runat="server" id="popBox" style="background-color:White; position: absolute; display:none; ">
                    <asp:GridView ID="GridViewDate" runat=server AutoGenerateColumns=true></asp:GridView>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    Et dans le code behind, j'ai juste à le binder.

    Par contre j'ai pas compris comment mettre en place ta page "quasi vide" ? Vu que la requete s'effectue sur la même page, je vois pas comment lui dire charger une page plus légère à la place.. ?

  5. #5
    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
    Citation Envoyé par kangaxx Voir le message
    Sinon oui j'ai bien installé visual studio 2005 avant l'ajax toolkit.
    SP1 je doit comprendre?

    Pour les id si tu as une master page et que ca marche c'est normal dans ce cas puisque tu as recopié l'id client.. Mais si par hasard tu supprimais ta masterpage ou changeais son nom, ton script ne marcherait plus

    Tu as maté l'AjaxControlToolkit? Il y a des tucs pour faire apparaitre des panels en survolant des liens, avec effets de glisser / fondu / zoom... (c'est plus cosmétique qu'indispensable, mais ca peut simplifier le travail dans beaucoup de cas d'affichage ponctuel en click/hover...

    Réfléchis bien aussi à un truc : ta liste est elle vraiment très longue au point de devoir générer un postback, ou n'est pas plus simple -au prix d'une page plus lourde- de préchargé des panels contenant les infos?

    Si tu n'as pas beaucoup d'éléments ca peut être plus rapide. Le client télécharge une plus grosse page, mais ca allège beaucoup coté serveur...
    (parce que le postback sous hover... Tu as de quoi faire craquer ton ScriptManager... Si une requete est en cours et que tu en lances une autre en meme temps, ca plante : il faut vérifier que ce ne soit pas le cas...)

    [edit] non non pour la page quasi vide, je voulais dire une simple page avec un updatepanel et un bouton, ou tu lances ton traitement au clique...
    Sans tout ce quil y a autour : c'était juste pour vérifier que le traitement fonctionne bien... C'est pas obligatoire hein, mais parfois (souvent) on cherche un problème là ou il n'est pas

    [reedit] Si certains points te paraissent flou, c'est que j'avais pas exactement compris ce que tu tentais de faire , j'avais compris qu'à terme il y avait plusieurs linkbutton et que chaquait d'eux affichait un panel avec plus d'infos en générant un postback....

    Mais bon vérifie que le panel s'affiche correctement juste en cliquant sur un bouton, et pas en survolant un lien... Car si tu survole deux fois de suite ton lien, ca pourrait bien se crasher...

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    Hum en fait elle est pas assez conséquente, mais surtout assez compliqué à récupérer, je préférais la récupérer à part c'est pour ca.

    Je vais continuer mes tests mais ca n'a pas l'air tres concluant, de toutes les manières, ca reste extremement lent... :-(

    J'ai fait le test avec le clic, j'ai toujours l'id précédent, et toujours aussi lent...

Discussions similaires

  1. [AJAX] [AJAX.NET] AutoCompleteExtender
    Par bcaly dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2007, 12h10
  2. [AJAX] Restaurer l'état de listes liées par Ajax
    Par vallica dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/10/2006, 13h36
  3. Réponses: 1
    Dernier message: 01/06/2006, 21h22
  4. [.NET][GLUT] problème avec iostream
    Par polonain2 dans le forum OpenGL
    Réponses: 7
    Dernier message: 17/03/2004, 17h24
  5. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10

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