Provocar un postback desde JavaScript con ASP.NET
Eva M. Higueras | 27 de enero de 2009
Más sobre: ASP.NET, JavaScript | Tags: ClienteId, doPostBack, eventArgument, eventTarget, JavaScript, MasterPage, postback, recargar página, UniqueId, UserControl, __dopostback
En varias ocasiones, trabajando con ASP.NET, nos hemos encontrado con la necesidad de lanzar un postback desde el cliente mediante una llamada realizada en JavaScript. Para esto, existe una función, __doPostBack, pero no funciona correctamente cuando hacemos la llamada desde un JavaScript colocado en un UserControl o si utilizamos una MasterPage. Después de mucho investigar, hemos averiguado cómo funciona realmente esta función, y qué debemos hacer para que funcione con UserControl y MasterPages. Además, hemos trabajado también con una alternativa para provocar un postback desde JavaScript.
Opción 1: Cómo utilizar __doPostBack(eventTarget, eventArgument)
Esta función puede llamarse desde código JavaScript y hace una llamada al servidor indicándole el control que la provoca, y los argumentos asociados a dicha llamada.
Los parámetros que se pueden pasar son:
- eventTarget: objeto que provoca el postback.
Si queremos que el postback que estamos forzando, llame al evento de algún objeto en particular, indicaremos como primer parámetro el identificador de este objeto. Este identificador será:
- en caso de que estemos en un control de tipo Page, el clientId del objeto.
- en caso de que estemos en un control de tipo UserControl, o que estemos utilizando MasterPages, necesitaremos el UniqueId del control, pero modificado.
La modificación del identificador es necesaria ya que cuando ASP nos devuelve el ClientID, utiliza como separador el carácter ‘_’, y para que la llamada al servidor funcione correctamente, necesitamos que se utilice como separador el carácter ‘$’. Para ello, podemos utilizar la siguiente función:
public static string UniqueIDWithDollars(Control ctrl) { string sId = ctrl.UniqueID; if (sId == null) { return null; } if (sId.IndexOf(':') >= 0) { return sId.Replace(':', '$'); } return sId; }
Y en la llamada al postback, escribiremos:
__doPostBack('<%= UniqueIDWithDollars(IDControl)%>;','');
- eventArgument: argumentos que se le pueden pasar a la función.
Estos parámetros se recibirán en el método asociado al postback del control indicado de manera que el objeto en eventTarget se recibirá como sender, y el argumento pasado en eventArgument se recibirá en e:protected void control_postback(object sender, EventArgs e)
Existe una alternativa al uso de la función UniqueIDWithDollars. Puedes consultar información detallada al respecto en “uso de la función GetPostBackEventReference“.
Opción 2: Utilizar el evento del cliente
Es posible invocar a métodos tales como el clic de un botón desde javascript utilizando simplemente el método clic del propio botón. Necesitaremos utilizar el evento de cliente asociado al evento del servidor que necesitamos disparar.
var boton = document.getElementById('<%= boton.ClientID %>'); boton.click();
También te puede interesar
- Unity Application Block 1.2. Caso Práctico.
- Enfoque optimista de gestión de transacciones en SQL Server
- Gestión de transacciones en SQL Server
Más sobre: ASP.NET, JavaScript | Tags: ClienteId, doPostBack, eventArgument, eventTarget, JavaScript, MasterPage, postback, recargar página, UniqueId, UserControl, __dopostback
Comentarios
1 comentario a “Provocar un postback desde JavaScript con ASP.NET”
Deja un comentario

Hola, Con la opción 2 logré forzar un evento clic ASP desde Javascript, eso si con una salvedad… tuve que buscar por ID que se generaba con el HTML no con el ID que yo le habÃa indicado en el ASPX, revisando con Firebug 1.4.2(Firefox) pude percatarme que ese era mi problema, pues en ejecucion el control cambiaba de nombre:
El Control es un ImageButton llamado ‘btAlluser’
NO FUNCIONA
var boton = document.getElementById(’<%= boton.btAlluser %>’);
boton.click();
SI FUNCIONA
var boton = document.getElementById(’_ctl0_btAlluser’);
boton.click();
MUCHAS GRACIAS POR EL ARTICULO.