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] Problème avec sender._postBackSettings.sourceElement.id


Sujet :

ASP.NET

  1. #1
    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
    Par défaut [AJAX] Problème avec sender._postBackSettings.sourceElement.id
    Bonjour tout le monde.

    J'ai un comportement qui ne me semble pas normal avec une page "ajaxisée".
    Voilà un code simplifié:
    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
     
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <asp:UpdatePanel ID="up1" runat="server">
                <ContentTemplate>
                    <asp:TextBox ID="tb1" runat="server"></asp:TextBox>
                </ContentTemplate>
            </asp:UpdatePanel>
            <br />
            <asp:UpdatePanel ID="up2" runat="server">
                <ContentTemplate>
                    <asp:TextBox ID="tb2" runat="server"></asp:TextBox>
                    <br />
                    <asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" 
                        onselectedindexchanged="ddl1_SelectedIndexChanged">
                        <asp:ListItem Text="---" Value=""></asp:ListItem>
                        <asp:ListItem Text="1" Value="1"></asp:ListItem>
                        <asp:ListItem Text="2" Value="2"></asp:ListItem>
                        <asp:ListItem Text="3" Value="3"></asp:ListItem>
                    </asp:DropDownList>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="up2" DisplayAfter="0" >
                <ProgressTemplate>
                    Loading...
                </ProgressTemplate>
            </asp:UpdateProgress>
        </div>
        <script type="text/javascript">
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            prm.add_pageLoading(PageLoading);
     
            function PageLoading(sender, args)
            {
                alert(sender._postBackSettings.sourceElement.id);
            }
        </script>
    En gros, le code affiche une alert avec l'ID responsable du post back.
    Quand je modifie l'item sélectionné dans la drop down list, j'obtiens bien l'id client de ma liste déroulante.
    Maintenant, si pendant le traitement serveur, je place le curseur dans l'une des textbox, l'alert m'affiche l'id client de la textbox où se trouve le curseur.

    Il manque un truc dans mon code, c'est un bug, j'ai rien compris?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Aprés une bonne investigation, il apparaitrait que c'est un comportement "normal".

    Dans l'ajax framework il y a une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function Sys$WebForms$PageRequestManager$_onFormElementClick(evt) {
    Comme son nom l'indique elle est appellée a chaque clique sur un element de la form.
    Dans cette fonction on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this._postBackSettings = this._getPostBackSettings(element, element.name);
    Et donc change sa valeur avec le nouvel élement cliquer.
    C'est vrai que c'est pas genial car peut etre a l'origine de certains bug.

    Si on suit leur resonnement apaprement le _postbacksetting devrais utiliser que avant que la requete soit envoyé (en gros sans que l'utilisateur est le temps de cliquer sur un autre élement).

    Aprés comment contourner ca je sais pas encore je vais voir.

  3. #3
    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
    Par défaut
    Ok, merci pour l'investigation.

    J'ai déjà contourné le problème.
    Je stock l'ID du control dans une variable javascript dans le initializeRequest

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

Discussions similaires

  1. [AJAX] Ajax avec input type file
    Par cywals dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/08/2006, 09h29
  2. [AJAX] problème avec readyState
    Par Booyakha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2006, 16h52
  3. [AJAX] Utilisation de responseXml
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/04/2006, 16h23
  4. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  5. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10

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