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 :

Bouton et CommandArgument


Sujet :

ASP.NET

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut Bouton et CommandArgument
    Bonjour à tous,

    Je suis un peu curieux, j'aimerais bien savoir où est conserver le commandargument d'un bouton entre l'envoit de la page au browser et le retour au postback ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:imagebutton id="imgbtMonBouton" runat="server" commandargument="BONJOUR" />
    Est-il conserver dans le Viewstate ? Je ne pense pas, entk j'ai chercher avec un Viewstate decoder et je n'ai rien trouvé.

    Pourrait-il être dans le ControlState ? Cela me surprendrait aussi puisque je l'aurais vu dans le ViewState lors du décodage...

    Enfin, si quelqu'un à la réponse ça sera sympa.

    Bonne journée

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Le CommandArgument d'un contrôle est stocké côté serveur. Ensuite, il est communiqué entre une page et le serveur via les champs Request.Forms["__EVENTTARGET"] (quel contrôle ?) et Request.Forms["__EVENTARGUMENT"] (quelle commande ?) lors d'une action.

    En espérant t'avoir aidé.

  3. #3
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Bonjour Nicolas,

    Il est stocké où côté serveur ?

    Lorsque je regarde le input html généré par un bouton Button, je ne vois aucun endroit où est indiqué l'argument en question (attributs html, onclick, etc...). Il doit sûrement être envoyé d'une certainne façon, lors de l'appel de __doPostback peut-être ? Mais encore là, il n'y a pas de "onclick="__doPostBack(...)".

    Je trouve cela bizarre qu'il soit stocké côté serveur, puisque parfois on spécifie le CommandArgument par binding ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandargument='<%# Eval("codeUnique") %>'
    Lors d'un postback, le binding n'est pas réalisé une seconde fois et pourtant dans l'événement RowCommand de la grille, le bouton (sender) contient bien l'argument.


    En fait, voilà où je veux en venir avec cette question. J'aimerais savoir s'il est possible de créer une nouvelle ligne DOM createElement (TR, TD.../TD /TR) dans une grille mais côté client. Cette ligne existerait déjà dans la base de données et les information serait récupéré via un PageMethode, une fois l'information récupéré, je créé la ou les lignes côté client par JavaScript.

    Je ne dois pas recharger la grille en entier. lorsque je récupère ces nouvelle lignes.

    Donc, dans ces nouvelles lignes, il y aurait aussi les boutons de commandes (btSupprimer, btEditer, etc...) et lorsque l'utilisateur cliquerait par exemple sur btSupprimer, alors l'événement RowCommand serait déclanché côté serveur et j'obtiendrait l'argument ici. Ce qui m'embête aussi c'est les IDs, comme le NamingContainer du GridView nomme les contrôle en se servant du RowIndex, alors il se peut que j'aie à récupérer des enregistrement qui sont entre deux lignes déjà présentes. Donc, j'aurais voulu que le NamingContainer nomme les sous-controles avec leur code unique de base de données à la place. Ex :

    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myGridView_ctl01_btSupprimer
    myGridView_ctl02_btSupprimer
    myGridView_ctl03_btSupprimer
    On aurait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myGridView_ctl1158_btSupprimer
    myGridView_ctl1348_btSupprimer
    myGridView_ctl2351_btSupprimer
    J'essais seulement de comprendre comment recréer le mécanisme.

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CommandBtn_Click(Object sender, CommandEventArgs e) 
    {
       // e.CommandArgument
    }

  5. #5
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CommandBtn_Click(Object sender, CommandEventArgs e) 
    {
       // e.CommandArgument
    }
    Merci, mais là n'est pas ma question. Je sais comment récupérer le CommandArgument d'un bouton

    Ce que j'aimerais savoir c'est comment le mécanisme fonctionne entre Client/Server.

    On spécifie le CommandArgument côté server (disons par binding) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandargument='<%# Eval("codeUnique") %>'
    Ensuite le code s'en vas côté client et plus rien n'existe côté serveur puisque la page est unloadée.

    Dès que le client fait un postback, ça retourne côté serveur, et boom, la dans l'événement click on a de nouveau le CommandArgument que l'on avait spécifié.

    Donc, où a-t-il récupéré ? Du ViewState, ControlSate, envoyé à l'aide de la commande __doPostBack ???

  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
    Par défaut
    Ca te va pas la réponse de Nicolas?
    Request.Forms["__EVENTARGUMENT"]

  7. #7
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Bonjour,

    Si je comprend bien cet article What about Buttons and ImageButtons?:

    Les noms et les arguments des Boutons et ImageButton ne figurent pas dans "__EVENTTARGET" et "__EVENTARGUMENT" de la collection Request.Form.

    Donc, pour déterminer le (Bouton ou ImageButton) qui à effectué le postback, on doit chercher dans la collection des key/pair de Request.Form et vérifier si un nom concorde avec le nom d'un des boutons étant sur déclaré sur la page.

    Toutefois, cela n'explique pas où est stocké le CommandArgument entre le postback côté client et la réception côté serveur. Je pensais qu'il était spécifié avec la méthode __doPostBack(...), mais faut croire que non, puisque les Button et ImageButton ne font pas appel (nativement) à la fonction __doPostBack.

  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
    Par défaut
    Je dirais que c'est natif au niveau du procole http. Ce dernier doit ajouter le name du contrôle qui submit la form

  9. #9
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Je dirais que c'est natif au niveau du procole http. Ce dernier doit ajouter le name du contrôle qui submit la form
    Pour les Button et ImageButton c'est effectivement le cas. Mais ce qui m'intéresse c'est le CommandArgument.

    Prenons l'exemple suivant :

    ASPX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:button id="btXXX" runat="server" text="btXXX" onclick="btXXX_Click" />
    CodeBehind
    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
    protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostBack)
       {
            btXXX.CommandArgument = DateTime.Now.ToString();
            // Placer un break point ici et regardé la valeur.
            // Disons que la date actuelle est '2010-11-22 16:04:54'
            // Une fois la page transmise au client, patientez 1 minute et 
            // effectuez un clique sur le bouton "btXXX" 
       }
    }
     
    protected void btXXX_Click(object sender, EventArgs e)
    {
       string s = btXXX.CommandArgument;
       // Placer un break point ici et regardez la valeur.
       // Le contenu de "S" est bien celui que l'on avait mis au départ.
       // Soit '2010-11-22 16:04:54'
       // Donc cela confirme qu'il est conservé quelque part côté client 
       // et renvoyé vers le serveur lors du postback
    }
    J'ai regardé dans la collection Request.Form, ViewState mais je n'ai jamais vu une trace du CommandArgument du bouton. Pourtant il doit bien être conservé quelque part côté client et lors d'un Postback renvoyé vers le serveur d'une certainne façon ?

    Avez-vous une idée pour les Button et ImageButton de quelle façon le CommandArgument est conservé et retransmis au serveur lors du postback ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/11/2007, 16h48
  2. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  3. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  4. Bmp pour boutons
    Par Fizgig dans le forum Outils
    Réponses: 5
    Dernier message: 22/08/2002, 10h56
  5. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12

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