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