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 :

[c# 2.0] ObjectDataSource requête appelée deux fois


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut [c# 2.0] ObjectDataSource requête appelée deux fois
    Bonjour à tous,

    voici mon problème.
    J'ai une page qui est composé d'un formulaire de critère de recherche, d'un gridview qui servira à afficher le résultat et d'un objectdatasource qui fera appel à mon objet métier qui lui même fait appel à un webservice, ce dernier revoie un DataTable.

    La première fois que j'arrive sur ma page, la propriété DataSourceId du gridview n'est pas renseignée, donc aucune requête n'est exécutée, jusque là normal.

    Lorsque je clic sur le bouton "rechercher", je renseigne la propriété DataSourceId du gridview. A partir de là mon gridview est lié à mon objectdatasource.

    Et je me suis aperçu en debuggant que je passe deux fois dans l'évènement Selecting.

    Je passe une première fois, puis un appel est fait au webservice, puis je repasse une seconde fois dedans puis un autre appel au webservice est fait.
    Enfin le résultat s'affiche.

    Si j'enchaine une nouvelle recherche dans ce cas mon webservice sera appelé qu'une seule fois.

    Je précise que je ne fait ni de Select() sur mon objectdatasource ni de DataBind sur mon gridview.

    Auriez vous une explication en ce qui concerne ce double appel à mon web service. Pourquoi l'object DataSource fait il appel deux fois consécutivement à la méthode Sélect. Je comprends pourquoi la première fois, mais pas la seconde!


    Merci d'avance pour votre aide.

  2. #2
    Membre régulier Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 110
    Points
    110
    Par défaut
    Bonjour,
    j'ai moi aussi rencontré le problème.
    Je ne sais pas pourquoi cela fonctionne de cette manière mais j'ai résolue le pb de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" ...
    EnableCaching="true" CacheDuration="1" ></asp:ObjectDataSource>
    Pour résumer, ceci signifie que l'ObjectDataSource garde en cache le resultat du select et ne ré-exécutera pas la requete pendant CacheDuration

    bon courage.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Merci bien.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    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
    C'est pas vraiment acceptable comme solution ça.
    C'est plus un cache misère qu'autre chose

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Effectivement. Mais comment contrer cela?

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    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
    Faire du debug pas à pas et trouver les 2 appels à cette fonction

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Justement il n'y pas d'appel de fait...

    Le fait d'indiquer au gridview le DataSourceId suffit à ce que la méthode définit par le SelectMethod soit appelée... Et ce 2 fois consécutivement.
    Dans mon code je n'ai aucun DataBind sur mon gridview, et ni d'appel à la méthode Sélect() de mon ObjectDataSource.

    Ce phénomène ce produit seulement lorsque je demande l'exécution de ma recherche la première fois. Si je demande une nouvelle recherche, ma méthode est éxécutée qu'une seule fois.

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    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
    T'as cherché sur Google, tu dois pas être le seul confronté à ça

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Oui j'ai cherché. Mais ce qu'il faut savoir, c'est que j'y suis tombé par hasard dessus en debuggant. Parceque j'avais un autre soucis...
    Il n'y a aucun soucis si non juste que la requête est exécutée deux fois de suite la première fois. Le problème peut etre résolu en décidant de binder soit même le gridview en récupérant au préalable le résultat du sélect() de l'object datasource que l'on caste en DataView. Cela fonctionne au détriment de perdre la Sorting, ainsi que le Paging qui est gérer automatiquement par l'ObjectDataSource.

    J'ai rien trouvé sur Google à ce sujet.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/08/2008, 20h45
  2. [PHPLIB] Phplib + firefox => fonctions appelées deux fois
    Par tupac59LC dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/02/2008, 00h35
  3. Fonction appellé deux fois
    Par stephane92400 dans le forum JSF
    Réponses: 5
    Dernier message: 17/08/2007, 16h22
  4. Réponses: 6
    Dernier message: 17/08/2006, 19h16

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