Evitar el postback al pulsar un botón en ASP.Net

De vez en cuando reviso las palabras por las que se llega a Variable Not Found a través de los buscadores, más que nada porque suelen reflejar dudas o problemas comunes de los desarrolladores y pueden servir como inspiración sobre nuevos temas a tratar en el blog.

Pues bien, llevo tiempo observando que hay muchas personas que preguntan a Google algo similar a "anular postback en botón", es decir, se tienen dudas sobre cómo evitar el disparo del postback al pulsar un botón de un formulario ASP.Net. El tema me ha parecido tan interesante que intentaré dar una respuesta a la duda estudiando algunas de las distintas posibilidades que pueden darse. Eso sí, si echáis en falta algún caso, no dudéis en comentarlo y lo trataremos lo antes posible.

I. ¿Hablamos de botones con lógica exclusivamente en cliente?

La primera cuestión es preguntarse para qué queremos un botón que no realice un postback al ser pulsado. Pensad que si todas las acciones desencadenadas por la pulsación del botón se realizarán en cliente es posible que no necesitemos un control ASP.Net. Imaginemos, por ejemplo, un botón que queremos que haga un cálculo en el cliente y muestre un cuadro de alerta con el resultado... ¿es necesario que sea un control de servidor (runat="server")? Seguro que no.

Para este caso lo más apropiado es incluir en el .aspx un HTML INPUT de los de toda la vida:

  <input id="Button1" type="button" value="button"
         onclick="hacerAlgo();" />

Si eres de los que prefieren arrastrar y soltar, puedes hacer exactamente lo mismo utilizando los controles incluidos en la pestaña HTML de Visual Studio, en este caso el llamado Input(Button). El resultado visual será idéntico al de un Button (un botón de servidor) y estaremos aligerando tanto la página enviada al cliente como la carga del servidor.

II. Anular el postback en un botón de servidor

Otra posibilidad es que vayas a usar un control de servidor (un Button, por ejemplo) y sólo bajo determinadas circunstancias quieras anular el postback desde el cliente. Obviamente, estas circunstancias serían calculadas/obtenidas por script, por lo que podríamos aplicar un patrón como el siguiente:

...
<asp:Button ID="Button1" runat="server"
Text="Pulsa"
OnClientClick="return comprueba();" />
...
<script type="text/javascript">
function comprueba() {
return confirm("Confirme el postback");
}
</script>

Como se puede observar, se ha modificado la propiedad OnClientClick del botón para hacer que retorne el resultado de la llamada a la función comprueba(). Si ésta retorna cierto, se realizará el postback, mientras que si retorna falso, no lo hará. En el ejemplo anterior se permite al usuario decidir si desea enviar el formulario al servidor o no.

III. Anular la posibilidad de envíos múltiples

Hay otras ocasiones, sin embargo, en las que estamos utilizando un botón de servidor de forma normal y simplemente queremos evitar duplicidades en el envío del formulario, es decir, bloquear el botón correspondiente una vez el usuario lo haya pulsado la primera vez.

Esto es muy habitual debido a la falta de feedback: el usuario envía el formulario, se impacienta esperando la respuesta o no está seguro de haberlo enviado, y cual poseso, inicia un ataque implacable sobre el botón de envío. ¿A que os suena?

El comportamiento típico, adoptado por la mayoría de sitios web, es deshabilitar el botón y seguir con el postback. Sin embargo, esto que podría ser realmente sencillo mediante scripting, causa algún que otro problema cuando el botón es de tipo Submit, puesto que en determinados navegadores (por ejemplo IE6) no realizará el envío si lo está generando un botón deshabilitado. Una forma de evitar este problema es hacer que el botón no sea de tipo submit e incluir un pequeño script:

<asp:Button ID="Button2" runat="server"
Text="Pulsa"
OnClientClick="this.disabled=true"
UseSubmitBehavior="False"/>

Si el botón debe ser obligatoriamente de tipo submit, se deben utilizar soluciones alternativas. Googleando un poco he encontrado varias, como deshabilitar el botón pasadas unas décimas de segundo mediante un timer, o retocar los estilos del botón para, simplemente, hacerlo desaparecer y mostrar en su lugar un mensaje informativo. La mejor, para mi gusto, consiste en capturar el evento onsubmit del formulario web, así:

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">

function deshabilita()
{
var btn = "<%= Button1.ClientID %>";
if (confirm("Confirme postback"))
{
document.getElementById(btn).disabled = true;
return true;
}
return false;
}
</script>


Este último ejemplo lo he aprovechado para, además, mostrar cómo es posible realizar la captura del envío justo antes de que se produzca, en el evento OnSubmit, e introducir las confirmaciones de envío y deshabilitado de botones.

Publicado en Variable not found.

Published 28/11/2007 21:21 por José M. Aguilar
Comparte este post:
http://geeks.ms/blogs/jmaguilar/archive/2007/11/28/evitar-el-postback-al-pulsar-un-bot-243-n-en-asp-net.aspx

Comentarios

# re: Evitar el postback al pulsar un botón en ASP.Net

La funcion "HacerAlgo();" deberá ser escrita usando forzosamente un scrip de Java?, ¿como puedo hacer para que ejecute un procedimiento en c#?

Por tu respuesta, muchas gracias.

Wednesday, December 19, 2007 1:06 AM por Carlos Herrera Pinto

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Carlos.

Hay varias opciones para hacer eso que dices. Una, la más simple, es usar un botón de servidor (los normales), y capturar el evento onclick del mismo.

Si lo que quieres es invocar un método de servidor directamente desde el cliente deberás usar Ajax; es sencillo, prueba a leer estos posts:

- Llamar a métodos estáticos con ASP.NET Ajax(www.variablenotfound.com/.../llamar-mtodos-estticos-con-aspnet-ajax.html)

- Llamar a servicios web usando ASP.NET Ajax (www.variablenotfound.com/.../llamar-servicios-web-con-ajaxnet-paso.html)

Un saludo.

Wednesday, December 19, 2007 8:43 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

¿y como se podría bloquear todos los elementos de una página a excepción de un control de usuario que tiene un botón sí, no, de modo que cuando pulse uno de los dos botones, el control deje de verse y ya se puedan pulsar otros botones, filas de gridview, etc?

Supongo que si hubiese utilizado javascript para que mostrase directamente un cuadro de diálogo lo habría solucionado, pero el problema es que la aplicación está ya muy avanzada y no es posible volver atrás para empezar de cero.

Gracias por adelantado

Monday, July 14, 2008 10:37 AM por Raúl

# re: Evitar el postback al pulsar un botón en ASP.Net

Gracias! me estaba volviendo loca. Tengo un gridview con el que actualizo una tabla y al agregar filas presionando muchas veces el botón correspondiente, me agregaba tantas filas como clicks le daba al botón. Buscaba solución en google hasta que llegué a esta página y la encontré! Gracias!

Wednesday, July 16, 2008 6:31 AM por Patricia Miyagi

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola!

Patricia, me alegro de que te haya sido útil.

Raúl, supongo que no he entendido muy bien tu cuestión. El bloqueo de controles es algo relativamente sencillo con javascript (como el último ejemplo del post, pero realizado por cada uno de los controles que tengas en la página), y también podrías hacerlo desde servidor usando las propiedades estándar de los controles, o incluso utilizar ASP.NET Ajax para mostrar cuadros de diálogo bloqueantes.

La solución a emplear dependerá de las tecnologías que estés usando y de lo que pretendas hacer; si quieres enviáme un mensaje privado (usa el formulario de contacto) y seguimos profundizando en el tema.

Saludos.

Sunday, July 20, 2008 12:17 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

Yo tengo el problema inverso.  Tengo un botón que hace postback, pero una vez ya en el servidor, se ejecuta dos veces el evento.  Uno al solicitarlo mediante el boton y otro el cual no se por que se ejecuta.

Este el codigo de la pagina

<asp:Button ID="btSubmit" runat="server" CssClass="btSubmit" OnClick="btSubmit_Click" OnClientClick="disable__buttons(_Buttons_);" Text="Confirmar" UseSubmitBehavior="False" />

este el script cliente (sirve para deshabilitar varios botones a un tiempo, cuyos ID están en la variable _Buttons_

function disable__buttons(ob) {

  try {

     if (typeof(Page_ClientValidate) == 'function')

     {

        if (Page_ClientValidate() == true )

        {

           for(var i=0; i < ob.length; i++)

           {

              var elem = document.getElementById(ob[i])

              var tag_name = elem.tagName.toUpperCase()

              if(tag_name == "INPUT" || tag_name == "BUTTOM") {

                    elem.disabled = true;

              }

           }

        }

     }

  }catch(ex) {

     alert(ex.message)

     return false

  }

  return true

}

y por ultimo, este es el evento

Protected Sub btSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btSubmit.Click

     Response.Write("btSubmit_Click - in<br/>")

     Response.Write("ddlNivel.SelectedValue: " & ddlNivel.SelectedValue & "<br/>")

     If Page.IsValid Then

        'trata la informacion de acuerdo a opcion

        TratamientoFilas(op.Value)

        VaciarCampos(op.Value)

     Else

        msgError.Text = "ERROR: No todos los datos son correctos."

     End If

     Response.Write("btSubmit_Click - out<br/>")

  End Sub 'btSubmit_Click

con sus funciones llamadas

Private Sub VaciarCampos(ByVal op As String)

     Response.Write("vaciarCampos - in<br/>")

     Usuario.Text = String.Empty

     Clave.Text = String.Empty

     RealName.Text = String.Empty

     email.Text = String.Empty

     ddlPrestador.SelectedIndex = 0

     ddlPerfil.SelectedIndex = 0

     ddlNivel.SelectedIndex = 0

     ddlMcaHabil.SelectedIndex = 0

     msgError.Text = String.Empty

     If op <> "A" Then

        ddlUsuarios.SelectedIndex = 0

     End If

     Response.Write("vaciarCampos - out<br/>")

  End Sub

Private Sub TratamientoFilas(ByVal op As String)

     Response.Write("TratamientoFilas - in<br/>")

     If ddlNivel.SelectedValue = -1 Then

        Response.Write("Reentrando<br/>")

        Response.End()

     End If

     'si es una baja

     If op = "B" Then

        ProcesarBaja()

        Exit Sub

     End If

     'apertura de la conexion

     Dim conn As OraDBConnector

     Try

        conn = AbrirConexionBD()

     Catch ex As Exception

        Throw New System.Exception(ex.Message)

        Exit Sub

     End Try

     'parametros del paquete

     Dim arr As New ArrayList

     arr.Add(conn.AddParameter("pv_codigo", Usuario.Text, 10))

     arr.Add(conn.AddParameter("pv_pass", Clave.Text, 10))

     arr.Add(conn.AddParameter("pv_nombre", RealName.Text, 60))

     arr.Add(conn.AddParameter("pv_nivel", ddlNivel.SelectedValue))

     arr.Add(conn.AddParameter("pv_mca_habilitado", ddlMcaHabil.SelectedValue, 10))

     arr.Add(conn.AddParameter("pv_email", email.Text, 100))

     arr.Add(conn.AddParameter("pv_prestador", ddlPrestador.SelectedValue))

     arr.Add(conn.AddParameter("pv_perfil", ddlPerfil.SelectedValue))

     arr.Add(conn.AddParameter("pv_tipo_manten", op, 1))

     arr.Add((conn.AddParameter("pv_status", OracleType.VarChar, 10)))

     'ejecuta el procedimiento

     Dim htProc As Hashtable

     htProc = conn.ExecuteStoredProcedure("pk_net_art_traslados_admin.User_Manten_Usuario2", arr)

     Dim status As String

     status = htProc("pv_status") 'obtengo el valor status

     conn.Close()

     'F = Fila duplicada

     If status = "F" Then

        msgError.Text = "El usuario que intenta guardar ya existe."

     Else

        msgError.Text = "La informaci&oacute;n se guard&oacute; correctametne"

     End If

     Response.Write("TratamientoFilas - out<br/>")

  End Sub

Como verán, aun tiene código de debug, pues no le encuentro el porque se repite el evento.

Si alguno tiene una idea, por favor coméntemea a julgon@gmail.com

Le quedaré muy agradecido.

Tuesday, July 22, 2008 6:23 AM por JULIO

# re: Evitar el postback al pulsar un botón en ASP.Net

Yo me he encontrado con tu problema, desconozco la razón. Pero sé qué funciona, elimina el control y creálo de nuevo (deja tu código intacto), sí funciona...pero por qué?, ni idea...

Tuesday, July 22, 2008 8:23 PM por Jorge

# re: Evitar el postback al pulsar un botón en ASP.Net

YO he quitado el control del evento y lo he vuelto ha poner y tb me h afuncionado

Monday, September 22, 2008 11:49 PM por Sergio

# re: Evitar el postback al pulsar un botón en ASP.Net

Tb he quitado el codigo..lo he ejecutado (ha dado error), lo he vuelto a pegar y funciona

Tuesday, September 23, 2008 8:27 AM por Sergio

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola tengo un problema deshabilito mi boton cuando el cliente lo pulsa, pero quiero que se vuelva activar cuando el servidor resulva y muestre los resultados, no se en que evento lo puedo realizar.

Gracias de antemano.

Thursday, April 16, 2009 7:17 PM por Denise

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Denise.

Eso lo puedes hacer al menos de dos formas:

- Una posibilidad es que se trate de un botón de servidor, deshabilitarlo en cliente (como se indica en el post), y en el tratamiento del evento onclick del mismo (en servidor), habilitarlo o hacer lo que quieras con el botón.

- Otra posibilidad es utilizar Ajax para comunicarte con el servidor. Es decir, cuando el usuario pulse el botón, podrías desactivarlo, invocar mediante Ajax alguna funcionalidad en el servidor, y una vez ésta finalice, volver a activarlo. Algo más arriba, en otro comentario, hay un par de enlaces que te puede ayudar:

  * Llamar a métodos estáticos con Ajax: www.variablenotfound.com/.../llamar-mtodos-estticos-con-aspnet-ajax.html

  * Llamar a servicios web con Ajax: www.variablenotfound.com/.../llamar-servicios-web-con-ajaxnet-paso.html

Un saludo.

Thursday, April 16, 2009 7:32 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, mi problema es casi igual creo yo pero es con el control DropDownList, este control es llenado desde el Servidor al cargar la pagina es llenado desde una tabla X, pasa q al cambiar de opcion me elimina los datos q he digitado hasta llegar a ese control, los borra una vez q cambio de opcion en dicho control y este cambio lo capturo en el evento TextChanged ya q ocurren cambios(desaparecen y aparecen cajas de texto, dependiendo de lo q escoja) y esta verificacion la hago en le CodeBehind, como lo puedo hacer en mi caso...

desde ya gracias.

Enzo

Monday, May 25, 2009 4:51 PM por Enzo

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Enzo.

Por lo que me dices, entiendo que tu problema es que debes hacer aparecer y desaparecer bloques (paneles) de un formulario dependiendo del valor seleccionado en el desplegable, no?

En este caso, una opción es configurar el DropDown con el Autopostback (entiendo que ya lo tienes así) y ajustar la visibilidad de los paneles en el evento de cambio del mismo... si es este tu caso, deberías dejar que el postback se produzca.

Otra posibilidad es hacerlo todo en cliente (probablemente tu pregunta vaya por aquí); en ese caso, lo mejor es no habilitarle el postback (AutoPostback=false), y añadirle un controlador del evento onchange en script. Puedes hacerlo en el Load del formulario:

if (!IsPostBack) { DropDownList1.Attributes.Add("onchange", "cambiar(this)");

}


Ya desde script, en la función cambiar(), puedes ocultar o mostrar los bloques a tu antojo.

Espero que te sea de ayuda, no tengo claro si he llegado a entender bien tu pregunta...

Saludos.

Monday, May 25, 2009 5:13 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

José, la verdad me sorprendi gratamente por la velocidad de respuesta, Gracias.

y si lo q necesito es lo q tu indicas la unica diferencia es q tengo q hacer aparecer o desaparecer unos TextBoxs, en la funcion cambiar, pero ahí hay algo q hago mal, a ver si me puedes orientar un poco mas, disculpa si soy un poco Nezio, jejeje.

Code-Behind(evento Load)

if (!Page.IsPostBack)

{ddlRevisionInstrum.Attributes.Add("onchange", "cambiar(this)");}

Aspx

function cambiar(){

 if(this) == 'CAMBIO SIN COSTO'){

    $('txtPresupuesto').visible = false;

    $('txtAbono').visible       = false;

    $('txtSaldo').visible       = false;

    $('ddlProcedePresup').val('NO')

 }else{

    $('txtPresupuesto').visible = true;

    $('txtAbono').visible       = true;

    $('txtSaldo').visible       = true;

    $('ddlProcedePresup').val('SI')

 }

}

todo esto q con el AutoPostBack en False

Monday, May 25, 2009 5:50 PM por Enzo

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Enzo.

Al ritmo que vamos, parece como si estuviéramos conectados al Messenger :-DD

Lo único que tienes raro en tu código es el uso de "this". Prueba el siguiente código y lo verás claro:

function cambiar(o)
{
   // Obviamente, aquí iría tu código...
   alert(o.options[o.selectedIndex].text);
}

El parámetro que recibe la función cambiar es una referencia al desplegable. Por eso hay que buscar el valor seleccionado accediendo a sus opciones.

Saludos.

Monday, May 25, 2009 6:02 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

Ah, otra cosa.

Ten en cuenta que el nombre de tus controles, salvo que sean exclusivamente en cliente, no son del tipo "txtAbono", esos son los nombres en servidor. Tienes que obtenerlos utilizando algo como <%= txtAbono.ClientID %>.

Saludos.

Monday, May 25, 2009 6:43 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

Resulto José, te agradezco mucho...

Saludos

PD: no es por ser abusivo, pero si tengo nuevas dudas con temas similares a este te puedo preguntar por aka o por donde(MSN, Correo..) :)

pasa q al llenar una GridView me pasa lo mismo, jejeje, es decir, me borra lo ingresado, esta la lleno desde el CodeBehind, en el evento TextChanged de una txt, y al cambiar el contenido me llena una gridview en un modalpopup con un SelectLike, todo bien lo unico malo es q me elimina los datos ingresados hasta ese minuto...

disculpa si te fastidio pero llevo varios dias dandole vueltas...

Desde ya muchas gracias...

Monday, May 25, 2009 7:12 PM por Enzo

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Enzo.

Si los controles se te vacían probablemente es porque estás realizando un postback, y o no estás usando el viewstate de forma correcta, o estás machacando los valores de los controles en algún sitio. Revisa con puntos de ruptura por dónde se está ejecutando tu aplicación y mira a ver si en el Form_Load() estás inicializándolos sin tener en cuenta si es un postback o no (con IsPostBack), comprueba si los valores están llegando al evento TextChanged... en fin, intenta realizar una traza completa y seguro que das con el problema.

Y por supuesto, puedes preguntar por aquí todo lo que quieras. Eso sí, si tiene que ver con la temática del post, mejor. ;-)

Saludos.

Tuesday, May 26, 2009 8:02 PM por José M. Aguilar

# re: Evitar el postback al pulsar un botón en ASP.Net

Yo tengo el siguiente problema:

TEngo una aplicación web en la que creo un registro nuevo y posteriormente lo guardo. Hasta ahí, doto OK. Cambio de página para hacer otra operación y al regresar a la primera en donde registré un nuevo dato, estos no se cargan, como que se pierde algo. He checado en el codebehind y resulta que ni siquiera se ejecuta el evendo Page_Load de esa página. Que me sugieres?    Saludos...

Saturday, June 13, 2009 3:06 PM por Nelson

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Nelson.

Tiene toda la pinta de tratarse de un problema con la caché, es decir, que tu navegador te está mostrando la misma página que antes. Si pruebas a refrescar la página, probablemente ya te muestre lo que debe.

Si es este el caso, prueba a modificar el tiempo de expiración de la página, para que el cliente no la almacene con Response.Expires.

Saludos.

Sunday, June 14, 2009 4:02 PM por José M. Aguilar

# Evitar el postback al pulsar un botón en ASP.Net

Buenas tardes, tengo un problema ojala puedan ayudarme.

tengo un webform en el cual coloque controles DropDownList los cuales lleno con un DataTable

Al 'correr' la página elijo los datos del ddl y cuando doy click en el botón de Agregar me guarda los valores que aparecen al principio es decir el primer valor que aparece en el ddl y no el que elegí, a que se deberá?

Monday, June 15, 2009 12:25 AM por Aarón

# Disculpas..

Mil disculpas, he solucionado el problema, unas lineas de código donde no debían ir :P, gracias!

Monday, June 15, 2009 12:51 AM por Aarón

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, tengo un TextBox, un Button y un DataTable, lo que quiero hacer es que al dar click me agregue lo que se escribie en el textBox al dataTable como una nueva fila, esto lo en el evento click, el dataTable lo he declarado como variable de instancia (fuera del evento), es solo que no me conserva la fila en cada click, creo que el postBack del Button me borra la nueva fila y no me las esta conservando, mi duda es si estoy en lo cierto o que es lo que pasa

De antemano gracias

espero y me puedas guiar un poco con este problema

Monday, July 13, 2009 11:45 PM por Angel

# Evitar el postback al pulsar un botón en ASP.Net

Hola.. Buenos dias, espero que me puedas ayudar con esto. Tengo una pagina asp.net con ajax en las que ejecuto controles web mediante unos link button que tienen la propiedad modal popup extender. todo esto esta dentro de un update panel Mode Conditional. El problema es que cuando ejecuto este link y cierro el panel en donde se encuentra mi control me aparecen todos los controles que se encuentran dentro del update panel y se cierran como un pantallazo. ¿Como podre evitar que se ejecuten todos los controles? Cabe mencionar que en mi maquina que tiene internet explorer 8 no lo hace, pero le instale el internet explorer 8 a mi portatil y sigue el problema. De Antemano Gracias. Buen Día

Wednesday, August 05, 2009 5:56 PM por Sweet Kroline

# re: Evitar el postback al pulsar un botón en ASP.Net

hola que tal buenos dias, muchas gracias por haber hecho la explicacion acerca de como evitar el postback en el boton, yo tengo varios modalpopup dentro de mi pagina y al pulsar un control que realice el postback me muestra todos los modalpopup en un pantallazo; los postback de los botones està resuelto. Pero tengo tambien un dropdownlist en el que requiero un postback como podrè hacer para que no me afecte en mis modalpopup`s

Wednesday, August 12, 2009 6:39 PM por Carolina

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola José y comapañia (o sea el resto de la comunidad)!!

En verdad es sorprendente que modificando el control se solucione el problema de repetirse la llamada.

Bien, escribo  en este mismo post, dado que no se como ingresar uno nuevo, el problema que tengo es que no se hace el refresh en un gridviews en automático tras eliminar un registro.

Les planteo, en el gridview tengo un buttonfield con el valor btnEliminar en su propiedad commandname

<asp:ButtonField ButtonType="Image" CommandName="btnEliminar" ImageUrl="~/Img/eliminar.ico" Text="Eliminar" />)

La eliminación del registro la realizó utilizando el evento RowCommand del grid, esto es:

   Protected Sub grdLista_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdLista.RowCommand

       Dim msg As String

       If e.CommandName = "btnEliminar" Then

           msg = eliminarItem(e)

           If msg <> "" Then

               MsgBox(msg, MsgBoxStyle.Information, "SDPC-Web")

           End If

       Else

       End If

   End Sub

Pues bien, tras la ejecución y eliminación del registro, en pantalla sigo viendo los mismo n registros que había antes de la eliminación, dejando el efecto como si no se hubiera borrado el registro.

En la base de datos, tras la ejecución, reviso el contenido de la tabla y efectivamente puedo ver que se borró, ¿qué esta pasando, por que no se actualiza la pantalla de forma automática?

Saludos

Miguel González

jmgoc76@gmail.com

Wednesday, August 12, 2009 8:03 PM por Miguel Gonz&#225;elz

# re: Evitar el postback al pulsar un botón en ASP.Net

pucha amigo, niuno d tus codigos me sirve :(

Saturday, October 03, 2009 2:14 AM por Josué

# re: Evitar el postback al pulsar un botón en ASP.Net

Excelente articulo me soluciono varios dolores de cabeza que tenia con la anulación del postback en un botón de servidor y con los envíos múltiples, tenia varias opciones con algunas líneas de código y aun así no funcionaba bien y tu lo solucionaste con media línea

Gracias por todo

Wednesday, October 28, 2009 5:49 PM por Analista

# re: Evitar el postback al pulsar un botón en ASP.Net

hola el error por el que se repite dos veces el click del boton submit es porque en el codigo HTML se tiene OnClick="btSubmit_Click"

y en el code behind el btSubmit_click() tiene Handles btnSubmit.click

por eso repite 2 veces. Quita cualquiera, te recomiendo que quites la llamada HTML  y listo

Saludos

Friday, May 21, 2010 12:42 PM por glf

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola buenas tardes... espero puedas ayudarme... tengo un problema parecido pero diferente... te describo mi problema...

Tengo 1 textbox y 2 imagebutton... un imagebutton esta en un master page y el otro en el la pagina derivada del master,junto con el textbox.

La cosa es que primero asigne al evento ontextchange y a uno de los botones en su evento click el mismo procedimiento ya que quiero que al hacer enter en el textbox haga la misma funcion que el boton, la cual es una busqueda.

En IE funciona bien... pero no asi en Firefox... resulta k en firefox presiono enter y se ejecuta la busqueda, hasta alli todo bien... pero tambien se ejecuta el evento del boton que se encuentra en el masterpage, la cual es para cerrar sesion. Entonces hace la busqueda y luego cierra la session.

Bueno entonces intente por java script lo siguiente:

<scipt ...>

function PresionarBotonSiEnter(idBoton){

   if (event.keyCode == 13)

      {      

        document.getElementById(idBoton).click();

        return false;

      }

}

</script>

Al boton le puse la propiedad Autopostback en false y le asigne el atributo:

textbox.Attributes.Add("onkeypress","return(PresionarBotonSiEnter('"+btnBuscar.ClientID+"'));");

funciono el script... pero para mi sorpresa tambien se ejecutaba el evento del boton cerrar sesion. Entonces kite todo lo relacionado con ese textbox, le kite el script y el autopostback se kedo en false... Lo ejecute y probe en IE y escribia, hacia enter y no pasaba nada, no hacia postback ni nada, buena señal... pero al probar en firefox... noooo alli estaba el postback de nuevo... como si el boton cerrar sesion fuera un tipo submit y al hacer enter en el textbox este fuera enviado por default.

Bueno lo que quiero es que al hacer enter al textbox no haga un postback, si no que ejecute el script unicamente.

Te dejo los controles tal y como aparecen en el explorador firefox:

<input type="image" name="ctl00$btnSalir" id="ctl00_btnSalir" src="../Imagenes/menu_item_salir.png" style="border-width:0px;" />

<input type="image" name="ctl00$ContentPlaceHolder1$btnBuscar" id="ctl00_ContentPlaceHolder1_btnBuscar" src="../Imagenes/boton_buscar_administracion.png" style="border-width:0px;" />

<input name="ctl00$ContentPlaceHolder1$txtModelo" type="text" id="ctl00_ContentPlaceHolder1_txtModelo" />

Espero puedas ayudarme...de antemano gracias

Saturday, August 21, 2010 7:24 PM por grandamon

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola: mi problema es el siguiente. tengo un master page con varios botones que actuan como las opciones de un menu y un roundpanel que contienen otros botones para escoger la ciudad. Al cargar la master page deseo que sea visible solo el roundpanel con sus botones para que el usuario escoja la ciudad .. una vez escogida la ciudad que aparezcan los botones del menu. en el buttonClick hago false el atributo visible del roundpanel y true para los botones del menu. todo funciona bien hasta esa parte,pero al momento de hacer click en cualquier otro boton del menu se hace el postback y se carga de nuevo la master page como al inicio y me desaparece los botones del menu y hace visible de nuevo el rounpanel... que puedo hacer. Gracias de antemano

Wednesday, July 20, 2011 7:20 AM por Luis S.

# re: Evitar el postback al pulsar un botón en ASP.Net

Hola, Luis!

Por alguna razón, tu sistema no es capaz de mantener el estado (visible) del control cuando pulsas sobre los botones del menú.

Probablemente la pulsación de los botones del menú actúen como enlaces, llevando al usuario a una página independiente de la actual y por esta razón vuelve todo a estar como al principio.

Lo único que tendrías que hacer es conseguir enviar a las páginas interiores (las que aparecen al pulsar las opciones del menú) un parámetro con la ciudad seleccionada en el querystring (es decir, en la forma loquesea.aspx?idciudad=41). Ya en la masterpage podrías preguntar por la existencia de dicho parámetro (idciudad) y mostrar u ocultar los distintos elementos.

Espero que te sea de ayuda.

Saludos.

Wednesday, July 20, 2011 9:25 AM por José M. Aguilar

# Y como lo harías en este caso

Hola, a ver como se podría solucionar esto. Tengo un login form cargado en un span con jquery, después de intoducir usuario y clave pulsas el botón y ejecutas code behind. Después de hacer unas comprobaciones ves que el usuario o la clave no son correctos (chequeas con la BD). Entonces quieres mostrar un mensaje de error pero sin recargar la página. El problema como has ejecutado code behind te hace el postback si o sí y te recarga el formulario con el mensaje pero en toda la pantalla, por lo que toda la estructura de tu site se va al carajo. ¿Alguna idea de como hacer esto?

Thursday, July 28, 2011 12:37 PM por kilofafeure