2011-06-20 5 views
2

Je veux savoir quel bouton a été cliqué lors de la publication. Donc, si l'utilisateur clique sur un bouton .. Il va à la publication, puis à l'événement Click des contrôles.Façon de savoir sur quel bouton a été cliqué

Ce que je veux faire est de savoir quel bouton a été cliqué pendant la première étape. Pendant la phase PostBack.

Y a-t-il un moyen d'y parvenir?

ps. C# code seulement. C'est une question d'asp.net

+0

Matrix001, juste pour clarifier votre terminologie, le postback est lorsque l'utilisateur effectue une action sur leur navigateur Web (ou une action côté client automatisé se produit) qui provoque une demande de publication HTTP à renvoyer au serveur. Ce que vous appelez la "phase PostBack" est en fait les premières étapes du cycle de vie de la page qui se produisent avant la gestion des événements de publication (tels que les événements de clic sur les boutons). Je suppose que ce qui vous intéresse est d'obtenir des informations sur les événements de publication à venir tout en gérant un événement antérieur tel que 'Page.Load'. – pseudocoder

+0

Oui, ce que je veux, c'est obtenir le type d'événement du contrôle déclenché (ou simplement l'identité des contrôles) dès que l'utilisateur demande des informations, c'est-à-dire des clics sur le bouton. Je veux savoir quel bouton a été cliqué .. si c'était le bouton A ou B, ..mais je veux le savoir sur l'événement Page.Load – Matrix001

Répondre

6

Vous pouvez vérifier __EVENTTARGET et la collection Form avec un code similaire à celui-ci (volé sans vergogne de here).

public static System.Web.UI.Control GetPostBackControl(System.Web.UI.Page page) 
{ 
    Control control = null; 
    string ctrlname = page.Request.Params["__EVENTTARGET"]; 
    if (ctrlname != null && ctrlname != String.Empty) 
    { 
     control = page.FindControl(ctrlname); 
    } 
    // if __EVENTTARGET is null, the control is a button type and we need to 
    // iterate over the form collection to find it 
    else 
    { 
     string ctrlStr = String.Empty; 
     Control c = null; 
     foreach (string ctl in page.Request.Form) 
     { 
      // handle ImageButton controls ... 
      if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) 
      { 
       ctrlStr = ctl.Substring(0, ctl.Length - 2); 
       c = page.FindControl(ctrlStr); 
      } 
      else 
      { 
       c = page.FindControl(ctl); 
      } 
      if (c is System.Web.UI.WebControls.Button || 
         c is System.Web.UI.WebControls.ImageButton) 
      { 
       control = c; 
       break; 
      } 
     } 
    } 
    return control; 
} 

appel dans Page_Load comme ceci:

Control controlThatCausedPostBack = GetPostBackControl(this); 
+0

Il me dit que la méthode n'existe pas dans le contexte actuel. J'ai fait ceci: System.Web.UI.Control cont = new Control(); cont = ControlGetPostBackControl (this); – Matrix001

+0

@ Matrix001: Je l'ai testé, ça marche un régal :) – Town

+0

Comment le mettez-vous dans mon code ... pourquoi dit-il qu'il n'existe pas dans le contexte actuel – Matrix001

0

Employez juste une variable privée sur votre page Web. Dans le gestionnaire OnClick, définissez la valeur de cette variable sur l'argument sender (vous devrez le convertir en un bouton ou un contrôle).

+2

Je pense que ce n'est pas une réponse à la question @ Matrix001. Il demande à propos d'autre chose. À mon humble avis, il demande - comment obtenir le nom du bouton dans «Page_Load» après la publication. –

+0

Pas exactement un nom..Mais l'identité que c'est un bouton A qui a été pressé et non le bouton B – Matrix001

+0

wsanville. J'ai besoin d'obtenir les valeurs du bouton dans la phase de publication, et non quand le bouton déclenche l'événement qui se produit plus tard. Dès qu'il y a une publication et l'événement pageLoad est déclenché. Je veux savoir dans ce cas ... que le bouton A a été pressé – Matrix001

Questions connexes