Skip to content

Uso de __doPostBack

by en 12 mayo, 2011

Cuando programamos en ASP.NET, Frameworks 3.5+ y utilizamos un ASP:ScriptManager (desconozco la compatibilidad con otros ScriptsManager), las páginas que contengan el ScriptManager generarán automáticamente la función javascript __doPostBack(eventTarget, eventArgument).

La función __doPostBack hace exactamente lo que dice, genera un postBack en el formulario, y desencadena el evento servidor OnLoad de la página.

Para controlar el comportamiento de nuestro PostBack, deberemos obtener, en el evento OnLoad, los valores del eventTarget y eventArgument, si los valores son los esperados, realizaremos ejecución de alguna función, procedimiento o método que deseemos.

Ejemplo:

Supongamos que tenemos un ASP:TextBox, un ASP:Label y un Anchor (<a>), queremos que al hacer click en el anchor, el servidor tome el texto de la caja y lo escriba en el Label.

.ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UsoDe__PostBack.aspx.cs" Inherits="TEST.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Uso de __doPostBack</title>
    <script type="text/javascript">
        function ejecutar__doPostBack() {
            __doPostBack('<%= txt_desde.UniqueID %>', 'actualizar_label');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>
        <asp:Label ID="lbl_hasta" runat="server"></asp:Label>
        <asp:TextBox ID="txt_desde" runat="server"></asp:TextBox>
        <a href="#" onclick="ejecutar__doPostBack()">Ejecutar __doPostBack</a>
    </form>
</body>
</html>

.ASPX.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TEST
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((Request.Params["__EVENTTARGET"] != null) && (Request.Params["__EVENTARGUMENT"] != null))
            {
                if ((Request.Params["__EVENTTARGET"] == this.txt_desde.UniqueID) && (Request.Params["__EVENTARGUMENT"] == "actualizar_label"))
                {
                    this.lbl_hasta.Text = this.txt_desde.Text;
                }
            }
        }
    }
}

Copien, Peguen, Prueben y opinen.

¿Para qué usarlo? Bueno, ahí está la imaginación del programador, créanme, saca de apuros.

Un ejemplo claro donde se podría aplicar es en validaciones de un formulario. Si necesitamos validar un formulario por JavaScript antes de realizar el __PostBack, entonces podríamos controlar justamente este tipo de comportamiento gracias a esta función🙂

Enjoy🙂

From → ASP.NET, JavaScript

6 comentarios
  1. Hola..! Como haria para enviar un mnj de confirmación al usuario despues de realizar un dopostback? Porque estoy haciendo validaciones en un formulario, pero al hacer el dopostback me parece que tarda mucho tiempo y no me deja emitir un mensaje de confirmación de “Registro exitoso” o “Registro Fallido, intentelo mas tarde”. Esta respuesta la obtengo del archivo .aspx.cs

    Saludos

  2. Manuel permalink

    Gabo estoy tratando de parsear una pagina que contiene __doPostBack y se me ha hecho complicado, ya tengo los valores de EVENTARGET y EVENTVALIDATION, los cuales obtengo por GET y luego por POST los envio junto al nombre del textbox que necesito, pero lo unico que logro es que el textbox obtenga el valor, pero el postback no se realiza, tienes alguna idea?

  3. Hola Manuel, sería posible que me enviaras el código? puedes enviarme un email a gab[punto]espinoza[arroba]gmail[punto]com con los adjuntos o postear acá directo.

    Sin ver el código la verdad es que es bastante difícil diagnosticar y entender tu problema.

    Saludos

  4. Manuel permalink

    Gabo saludos, ya lo resolvi no estaba mandando el nombre y el valor del boton. El codigo es muy sencillo:
    response.Write Probar
    function Probar()
    Response.Buffer = false
    Dim objXMLHTTP, xml

    url = “http://www.xxxxxxxxxxxxxxx.com”
    Set xml = Server.CreateObject(“MSXML2.ServerXMLHTTP”)
    ‘Set xml = Server.CreateObject(“Msxml2.ServerXMLHTTP.3.0”)
    xml.Open “POST”, url, false
    xml.setTimeouts 75000, 75000, 75000, 75000
    xml.Send

    If xml.readyState 4 then
    xml.waitForResponse 15000
    End If

    If (xml.readyState 4) Or (xml.Status 200) Then
    xml.Abort
    Probar = “Inactiva”
    else
    ‘cookie = xml.getResponseHeader(“Set-Cookie”)
    Val = xml.responseText
    ‘strState = server.URLEncode(Mid(Val, 682, InStr(682, Val, “/>”) – 684))
    ‘strValida = server.URLEncode(Mid(Val, 1238, InStr(1238, Val, “/>”) – 1240))

    strState = Mid(Val, 682, InStr(682, Val, “/>”) – 684)
    strValida = Mid(Val, 1238, InStr(1238, Val, “/>”) – 1240)

    ‘Set xml2 = Server.CreateObject(“Msxml2.ServerXMLHTTP.3.0”)
    Set xml2 = Server.CreateObject(“MSXML2.ServerXMLHTTP”)
    xml2.Open “POST”, “http://www.xxxxxxxxxxxxxxx.com”, False
    xml2.setRequestHeader “Content-Type”, “application/x-www-form-urlencoded”
    ‘xml2.setRequestHeader “COOKIE”, left(cookie,instr(1,cookie,”;”)-1)
    ‘xml2.setRequestHeader “COOKIE”, left(cookie,instr(1,cookie,”;”)-1)
    xml2.setTimeouts 75000, 75000, 75000, 75000
    xml2.send “__EVENTARGUMENT=”&__EVENTTARGET=”&__VIEWSTATE=” & strState & “&__EVENTVALIDATION=” & strValida & “&Menu1$txttrack=1122533886&Menu1$Button1=Buscar”

    Probar= xml2.responseText
    Set xml2 = Nothing
    End If
    Set xml = Nothing
    end function

  5. Me alegro que lo solucionaras🙂

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: