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 :

ASP.NET Ajax - AsyncPostBackTrigger qui ne fonctionne pas deux fois de suite?


Sujet :

ASP.NET

  1. #1
    Membre actif Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Points : 221
    Points
    221
    Par défaut ASP.NET Ajax - AsyncPostBackTrigger qui ne fonctionne pas deux fois de suite?
    Bonjour à tous,

    Je ne sais pas si beaucoup d'entre vous utilisent Ajax sur ASP.NET, moi j'ai un problème "de base" (qui ne devrait pas être si compliqué) mais je n'arrive pas à trouver de solution malgré mes recherches sur internet.

    Ci dessous un exemple très simple que vous pouvez copier dans un projet de test pour reproduire le problème.

    J'ai :
    - Un label (en dehors de l'UpdatePanel).
    - Un UpdatePanel avec un label à l'intérieur.
    - Un bouton (en dehors de l'UpdatePanel).

    Dans le code juste derrière j'ai créé un AsyncPostBackTrigger et je l'ai lié sur l'événement du clic du bouton.

    Le bouton sert simplement à ajouter la date actuelle sur le label qui est dans l'updatepanel.
    À chaque postback complet, le label à l'extérieur de l'updatepanel est mis à jour avec la date actuelle.

    Mon problème est le suivant:

    Le premier clic sur le bouton fait un rendu partiel (c'est ce que je veux, c'est le but de l'utilisation d'ajax), mais un autre clic fait un postback COMPLET (reload de toute la page!) à la place de le faire partiellement.

    Contenu de Page1.aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <asp:Label ID="Label_FullPostBack" runat="server" Text="Label"></asp:Label>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Label ID="Label_PartialPostBack" runat="server" Text="Label"></asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:Button ID="Button1" runat="server" Text="Test" />
        </div>
    CodeBehind de Page1.aspx :

    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
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If IsPostBack() Then
                Label_FullPostBack.Text = Date.Now()
            End If
            Dim x As New AsyncPostBackTrigger()
            x.ControlID = Button1.UniqueID
            x.EventName = "Click"
            UpdatePanel1.Triggers.Add(x)
        End Sub
     
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            System.Threading.Thread.Sleep(1000) 'To see changes
            Label_PartialPostBack.Text = Date.Now()
        End Sub
    Comment faire pour éviter que ça reload tout? J'aimerai avoir une requête ajax à chaque clic, et pas une fois sur deux

    Merci d'avance pour votre aide précieuse.

    Micaël

  2. #2
    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 juste un problème d'ordre des événements du cycle de la page.
    Tu crées l'AsyncPostBackTrigger trop tard.

    Soit tu fais ça en code behind (C# ici)

    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
     
    protected void Page_Init(object sender, EventArgs e)
            {
                var x = new AsyncPostBackTrigger();
                x.ControlID = Button1.ID;
                UpdatePanel1.Triggers.Add(x);
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
                if (IsPostBack)
                    Label_FullPostBack.Text = DateTime.Now.ToString();
            }
     
            protected void Button1_Click(object sender, EventArgs e)
            {
                System.Threading.Thread.Sleep(1000);
                Label_PartialPostBack.Text = DateTime.Now.ToString();
            }
    Soit tu crées l'AsyncPostBackTrigger dans le code ASPX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <asp:Label ID="Label_FullPostBack" runat="server" Text="Label"></asp:Label>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Label ID="Label_PartialPostBack" runat="server" Text="Label"></asp:Label>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
            </asp:UpdatePanel>
            <asp:Button ID="Button1" runat="server" Text="Test" OnClick="Button1_Click" />

  3. #3
    Membre actif Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Points : 221
    Points
    221
    Par défaut
    Un grand merci pour ta réponse

    Ok j'ai essayé ça :

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

    Dim x As New AsyncPostBackTrigger()
    x.ControlID = Button1.UniqueID
    x.EventName = "Click"
    UpdatePanel1.Triggers.Add(x)
    End Sub

    Et ça fonctionne parfaitement maintenant (au moins sur cet exemple)!
    Donc j'aurais juste à déplacer tous mes codes dans le Me.Init à la place du Me.Load on dirait... je vais voir si ça fonctionne

    Question bête :
    Pourquoi cela fonctionnait une fois en Ajax et pour le reste pas une seule fois?

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

Discussions similaires

  1. [ASP] Validation de formulaire qui ne fonctionne pas
    Par lamouche42 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/04/2013, 12h24
  2. Réponses: 5
    Dernier message: 12/06/2012, 03h24
  3. AMFPHP qui ne fonctionne pas une fois mon swf en ligne
    Par Grimdol dans le forum ActionScript 3
    Réponses: 5
    Dernier message: 24/04/2009, 12h20
  4. Réponses: 5
    Dernier message: 14/02/2008, 21h20
  5. [asp.net C#] Event onclick ne fonctionne pas
    Par vin100H dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/08/2007, 10h35

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