Comment identifier un événement de publication dans Page_Load

Nous avons certains codes hérités qui doivent identifier dans le Page_Load quel événement a provoqué la publication. Pour le moment, ceci est implémenté en vérifiant les données de la requête comme ceci …

if (Request.Form [“__ EVENTTARGET”]!! = null
&& (Request.Form [“__ EVENTTARGET”]. IndexOf (“BaseGrid”)> -1 // événement BaseGrid (par exemple, sort)
|| Request.Form [“btnSave”]! = Null // bouton Enregistrer

C’est assez moche et ça casse si quelqu’un renomme un contrôle. Existe-t-il une meilleure façon de le faire?

Réécrire chaque page de sorte qu’il n’ait pas besoin de vérifier cela dans Page_Load n’est pas une option pour le moment.

Cela devrait vous donner le contrôle qui a causé la publication:

public static Control GetPostBackControl(Page page) { Control control = null; ssortingng ctrlname = page.Request.Params.Get("__EVENTTARGET"); if (ctrlname != null && ctrlname != ssortingng.Empty) { control = page.FindControl(ctrlname); } else { foreach (ssortingng ctl in page.Request.Form) { Control c = page.FindControl(ctl); if (c is System.Web.UI.WebControls.Button) { control = c; break; } } } return control; } 

Plus d’informations à ce sujet sur cette page: http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx

En plus du code ci-dessus, si control est de type ImageButton, ajoutez le code ci-dessous,

 if (control == null) { for (int i = 0; i < page.Request.Form.Count; i++) { if ((page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y"))) { control = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length - 2)); break; } } } 

Je ne fais que poster le code complet (ce qui inclut le bouton d’image / vérification de contrôle supplémentaire entraînant la publication). Merci beaucoup.

 public Control GetPostBackControl(Page page) { Control control = null; ssortingng ctrlname = page.Request.Params.Get("__EVENTTARGET"); if ((ctrlname != null) & ctrlname != ssortingng.Empty) { control = page.FindControl(ctrlname); } else { foreach (ssortingng ctl in page.Request.Form) { Control c = page.FindControl(ctl); if (c is System.Web.UI.WebControls.Button) { control = c; break; } } } // handle the ImageButton postbacks if (control == null) { for (int i = 0; i < page.Request.Form.Count; i++) { if ((page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y"))) { control = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length - 2)); break; } } } return control; }