jueves, 30 de agosto de 2012

Función __doPostBack

A veces en ASP.NET tenemos la necesidad de realizar un 'post back' desde JavaScript. Si analizamos el HTML que se genera con ASP.NET encontramos que los controles de ASP.NET llaman a la función __doPostBack para realizar esta acción. Esta es una función Javascript generada automáticamente por ASP.NET. Esta función recibe dos parámetros:
  • eventTarget
  • eventArgument
Por lo general en eventTarget se envía el ID del control que causa el 'post Back' mientras que en eventArgument se envía información adicional. Al realizarse el 'post back' ASP.NET analiza estos parámetros para ver quién ha realizado el 'post back' y a que evento debe acudir.

Sin embargo, podemos enviar información que no sea un ID en el eventTarget y que nos sirva para controlar una llamada a __doPostBack desde una función nuestra de JS. 
function realizarPostBack(dato) {
        __doPostBack('miPostBack', dato);
}


Por ejemplo tenemos la siguiente función de JS:

Desde ASP.NET podríamos recibir esto desde el evento load de la página. Accederemos al eventTarget mediante 'Page.Request.Params["__EVENTTARGET"]' y accederemos a eventArgument de forma similar 'Page.Request.Params["__EVENTTARGET"]'. Esto sería de la siguiente forma:
protected void Page_Load(object sender, EventArgs e)
{
          if(isPostBack){
                 if (Page.Request.Params["__EVENTTARGET"] == "miPostBack")
                {
                    string dat = Page.Request.Params["__EVENTARGUMENT"].ToString();
                    this.tratarMiPostBack(dat);
                }             
          }
}


Si se trabaja con ASP.NET esta función resulta útil. Yo particularmente la conocí debido a que tenía la necesidad de hacer un 'post back' desde JS.


4 comentarios:

  1. Muchas gracias ! Por fin una explicación clarísima del tema.

    ResponderEliminar
  2. exelente, me sirvio un monton tu explicación.

    ResponderEliminar
  3. Hola, buenas noches, tengo un problema con al ejecutar el __doPostBack('miPostBack', dato);, bueno, entra bien en la parte del Load y se insertan bien mis datos en la base de datos, pero al recargar el Iframe donde esta mi pagina, se queda con el IsPostBack en True e inserta los datos nuevamente.... no se supone que al ejecutarlo desde el JS deveria de pasar a false porque ya se ejecuto??....bueno espero me hayan entendido y me den un consejo...Saludos

    ResponderEliminar
    Respuestas
    1. Hola, no termino de entender lo que me comentas. Por lo general no suelo utilizar IFrames, por lo que pudiera ser alguna característica de estos, aunque lo dudo. Por otra parte, siempre que llames a la función __doPostBack en nuestro código tendremos IsPostBack a true (dado que estamos simulando el postBack). ¿Es posible que tu función JS se esté ejecutando al cargar la página o en algún momento no deseado? En ASP.NET a excepción de en el momento inicial de carga de una página tendremos el IsPostBack a true. Al no haber entendido completamente lo que me comentas no sé si esta respuesta te soluciona algo. En otro caso, espero tu respuesta y ver cómo ayudarte.

      Saludos.

      Eliminar