then not net ispostback asp c# asp.net

not - is postback c#



Cómo identificar el evento de postback en Page_Load (3)

Esto debería obtener el control que causó la devolución de datos:

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

Lea más sobre esto en esta página: http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx

Tenemos algún código heredado que necesita identificar en el Page_Load qué evento causó la devolución de datos. Por el momento, esto se implementa verificando los datos de solicitud como este ...

if (Request.Form ["__ EVENTTARGET"]! = null
&& (Request.Form ["__ EVENTTARGET"]. IndexOf ("BaseGrid")> -1 // Evento BaseGrid (por ejemplo, ordenar)
|| Request.Form ["btnSave"]! = Null // botón Guardar

Esto es bastante feo y se rompe si alguien renombra un control. ¿Hay una mejor manera de hacer esto?

Reescribir cada página para que no tenga que marcar esto en Page_Load no es una opción en este momento.


Además del código anterior, si el control es de tipo ImageButton, entonces agregue el siguiente código,

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; } } }


Solo estoy publicando el código completo (que incluye el botón de imagen / verificación de control adicional que causa la devolución de datos). Gracias Espo.

public Control GetPostBackControl(Page page) { Control control = null; string ctrlname = page.Request.Params.Get("__EVENTTARGET"); if ((ctrlname != null) & ctrlname != string.Empty) { control = page.FindControl(ctrlname); } else { foreach (string 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; }