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 :

Question sur la mise à jour des valeurs des controls entre le client et le serveur


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut Question sur la mise à jour des valeurs des controls entre le client et le serveur
    Bonjour à tous et toutes,

    Vous allez bien?
    Après quelques tests, j'ai une ou deux questions à poser sur le système serveur-client.
    Lors de mes tests, j'en ai fais un qui s'est déroulé comme suit:

    Dans ma page aspx, j'ai initialisé des controls (input type text, dropdownlist, etc). Je les initialisais avec le serveur, l'évènement Page_Load.
    Ensuite, je me suis dis que le serveur n'avait pas besoin d'être "mit au courrant" des agissements de l'utilisateur sur la page entre le moment où la page était initialisée et le moment où l'utilisateur cliquait sur le bouton pour valider.
    Mais le fait est que lorsque je récupérais mes valeurs des controls au niveau serveur, elles n'ont pas bougées.
    La mise à jour par le javascript n'est pas prit en compte je suppose.
    Qu'en pensez-vous? Ai-je bien résonné?
    Il n'y a-t-il pas un moyen afin de récupérer les valeurs modifiées par l'utilisateur?
    Merci beaucoup.
    C'est à ... que vous ... le plus de mystères.

  2. #2
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Salut,

    Avant l'initialisation des controles dans Page_Load il faut mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!IsPostBack){
    //initialisation controle.
    }
    . Bien sur ceci reste vrai tant qu'un postback existe juste après avoir cliquer sur le bouton.

    a+

  3. #3
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Oui en fait, je me suis un peu trompé durant une de mes observations. J'avais déclaré des textbox avec l'attribut disabled="disabled" pour que l'utilisateur ne puisse passer que par des boutons d'incrémentation ou de décrémentation à côté pour modifier la valeur des textbox, en code-behind ca passe pas. Il garde la valeur initiale...
    Bref, j'ai réussi à faire fonctionner tout ça cependant j'ai un petit soucis (que j'ai contourné tout de même)
    J'avais déclaré une listbox, une dropdownlist et un bouton. le but était que lorsque l'on clique sur le bouton d'ajout, la valeur selectionnée dans le dropdownlist soit ajoutée à ma listbox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listbox1.Items.add("contenu")
    Rien de compliquer, mais cependant, il l'ajoutait deux fois pour un seul clique sur le bouton.
    Bizarre tout de même, et si je mettais l'ajout dans un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (Not isPostBack) then
    listbox1.Items.add("contenu")
    End If
    Alors il n'ajoutait rien, c'était tout ou rien ^^' J'y ai remédié en ajoutant une condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If (Not listbox1.items.contains("contenu")) then
    listbox1.Items.add("contenu")
    End If
    Là aucun soucis! Et pour supprimer de la liste, idem, j'ai utilisé un cookie pour ne supprimer qu'une seule fois un enregistrement...
    Une explication? :o Quel évènement serait appelé lors du postback? Le binding de la listbox?
    C'est à ... que vous ... le plus de mystères.

  4. #4
    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
    Faut que tu montres plus de code

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Citation Envoyé par arkham55 Voir le message
    si je mettais l'ajout dans un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (Not isPostBack) then
    listbox1.Items.add("contenu")
    End If
    D'apres ce que j'ai compris, tu veux ajouter un element à la liste lorsque l'utilisateur appuie sur un bouton. Cela generera donc un postback coté serveur et comme ton code est dans un if(not postback) et bien il ne s'executera pas. C'est donc normal que l'element ne soit pas ajouté.

    Pour
    Citation Envoyé par arkham55 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listbox1.Items.add("contenu")
    Rien de compliquer, mais cependant, il l'ajoutait deux fois pour un seul clique sur le bouton
    Soit tu passes 2 fois par ton bout de code d'ajout, soit un probleme de databind... Mais difficile d'en dire plus sans voir plus de code.

    a+

  6. #6
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Je n'ai pas d'autre partie de code en rapport avec cet ajout, dans ma page il y a simplement le dropdownlist qui est rempli au Page_Load :

    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
     
    panel_adding.Visible = True
     
    If (Not IsPostBack) Then
                Dim read As SqlDataReader
                cnx.Open()
                cmd.Connection = cnx
                cmd.CommandText = "SELECT nom FROM Personne;"
     
                read = cmd.ExecuteReader
                While (read.Read)
                    selection.Items.Add(New ListItem(read("nom"), read("nom")))
                End While
                cnx.Close()
    End If
    Mon dropdown est généré correctement, non deux fois.
    Ensuite l'ajout est fait comme ceci : grâce à ma condition, il l'ajoute une fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub plus_img_Click(ByVal sender As Object, ByVal e As EventArgs) Handles plus_img.Click
            If (Not liste.Items.Contains(New ListItem(selection.SelectedItem.Value))) Then
                liste.Items.Add(selection.SelectedItem.Value)
                Response.Cookies("delete_ingr").Value = 0
            End If
    End Sub
    Pour la suppression j'ai mis une valeur à un cookie lorsque l'on clique sur le bouton et que le dernier élément est supprimé (avec un autre bouton) et je vérifie la valeur du cookie pour qu'il ne supprime pas les deux derniers enregistrements de ma liste...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub moins_img_Click(ByVal sender As Object, ByVal e As EventArgs) Handles moins_img.Click
            If (liste.Items.Count <> 0) Then
                If (Response.Cookies("delete_ingr").Value = 0) Then
                    liste.Items.RemoveAt(liste.Items.Count - 1)
                    Response.Cookies("delete_ingr").Value = 1
                End If
            End If
    End Sub
    C'est un peu de bidouillage mais c'est provisoire jusqu'à ce que je trouve le problème... Parce que il y a le postBack, il recharge la page mais n'est pas censé ré-exécuté le code du bouton quand même... C'est bizarre :s

    Mon code aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <asp:DropDownList runat="server" ID="selection" Width="182px"></asp:DropDownList>
    <asp:ImageButton id="plus_img" onclick="plus_img_Click" ImageUrl="Images/plus.png" AlternateText="Add" runat="server" /><label id="lbl_add" style="visibility:hidden; vertical-align:top;"> Ajouter!</label>
    <br />
    <asp:ListBox AutoPostBack="false" style=" float:left;" BorderStyle="Solid" Height="200px" Width="200px" BorderColor="Black" BorderWidth="1px" runat="server" ID="liste" BackColor="pink" DisplayMode="Text" ></asp:ListBox>
    Cette page à une page maître comme suit:
    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
     
    <%@ Master Language="VB" CodeFile="Master1.master.vb" Inherits="Master1" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <asp:ContentPlaceHolder id="head" runat="server">
     
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:ContentPlaceHolder id="ContentPlaceHolder1"  runat="server">
     
            </asp:ContentPlaceHolder>
     
     
            <div id="bas_img"></div>
        </form>
    </body>
    </html>
    Dans mon code Page_Load() de ma page maître, je ne fais que vérifier une variable de session pour l'affichage d'éléments simplement.

    Qu'en pensez-vous? =/
    C'est à ... que vous ... le plus de mystères.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2015, 10h31
  2. [AC-2010] Question sur requete mise à jour
    Par pierre031 dans le forum Access
    Réponses: 4
    Dernier message: 27/05/2014, 13h44
  3. Réponses: 2
    Dernier message: 30/03/2011, 03h07
  4. Mise à jour en temps des réel des données du Data Warehouse
    Par Reskibil dans le forum Microsoft BI
    Réponses: 8
    Dernier message: 27/03/2008, 09h38
  5. Réponses: 5
    Dernier message: 15/06/2007, 11h58

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