Provocar un postback desde JavaScript con ASP.NET

Eva Higueras | 27 de enero de 2009 | 12 comentarios

Más sobre: ASP.NET, JavaScript | Tags: , , , , , , , , , ,

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('','');
  • 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“.

Referencia (en Inglés)

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.click();

Más sobre: ASP.NET, JavaScript | Tags: , , , , , , , , , ,