2008-10-09 6 views
11

En C#, comment puis-je vérifier si un bouton de lien a été cliqué dans la méthode de chargement de page?ASP.NET: recherche d'un événement click dans page_load

J'ai besoin de savoir si on a cliqué dessus avant que l'événement de clic ne soit déclenché.

+0

Si votre code est tributaire de l'événement OnClick, alors vous pouvez mettre ce code particulier dans la Remplacement OnPageRender (plutôt que Page_Load), car il se déclenchera après le gestionnaire d'événement OnClick – snumpy

Répondre

19
if(IsPostBack) 
{ 
    // get the target of the post-back, will be the name of the control 
    // that issued the post-back 
    string eTarget = Request.Params["__EVENTTARGET"].ToString(); 
} 
+0

Avez-vous testé cela? Devrait avoir deux barres obliques - "__EVENTTARGET" –

+0

yup juste attrapé moi-même, merci! – Jared

+0

Des idées comment cela peut-il être utilisé avec un panneau de mise à jour? Cela ne semble pas fonctionner – Thomas

2

Vérifiez la valeur du paramètre de demande __EVENTTARGET pour voir s'il s'agit de l'ID du bouton de lien en question.

2

uniqueID du bouton sera Request.Form [ "__ eventtarget"]

2

si cela ne veut pas work.Try UseSubmitBehavior="false"

1

Sur la base de réponse acceptée et la réponse de cette RealSteel pourrait être une réponse plus complète.

d'abord ajouter au .aspx un bouton comme celui-ci:

<asp:Button id="btnExport" runat="server" Text="Export" UseSubmitBehavior="false"/> 

Ensuite, la méthode Page_Load:

if(IsPostBack){ 
    var eventTarget = Request.Params["__EVENTTARGET"] 
    // Then check for the id but keep in mind that the name could be 
    // something like ctl00$ContainerName$btnExport 
    // if the button was clicked or null so take precautions against null 
    // ... so it could be something like this 
    var buttonClicked = eventTarget.Substring(eventTarget.LastIndexOf("$") + 1).Equals("btnExport") 

} 
0

Je viens de recevoir le même problème, ont à faire un jugement logique dans la Méthode Page_Load pour traiter un événement différent (sur lequel le bouton a été cliqué).

Je réalise le bras pour obtenir le comme l'exemple suivant.

Le code source d'extrémité avant ASPX (j'ai beaucoup de boutons avec ID F2, F3, F6, F12.

<Button Style="display: none" ID="F2" runat="server" Text="F2:Cancel" OnClientClick="SeiGyo(this)" OnClick="F2_Click" /> 
    <Button Style="display: none" ID="F3" runat="server" Text="F3:Return" OnClientClick="SeiGyo(this)" OnClick="F3_Click" /> 
    <Button Style="display: none" ID="F6" runat="server" Text="F6:Run" OnClientClick="SeiGyo(this)" OnClick="F6_Click" /> 
    <Button Style="display: none" ID="F12" runat="server" Text="F12:Finish" OnClientClick="SeiGyo(this)" OnClick="F12_Click" /> 

Le code source aspx.cs arrière, ce que je dois faire est juge quel bouton a été cliqué quand Page_Load a été déclenchée. Il semble un peu stupide, mais fonctionne. J'espère que ce sera utile à d'autres

Dictionary<string, string> dic = new Dictionary<string, string>(); 
foreach(var id in new string[]{"F2","F3","F6","F12"}) 
{ 
     foreach (var key in Request.Params.AllKeys) 
        { 
         if (key != null && key.ToString().Contains(id)) 
          dic.Add(id, Request[key.ToString()].ToString()); 
        } 
} 
Questions connexes