evitar el postback al pulsar un botón en asp
DESCRIPTION
tipTRANSCRIPT
-
25/3/2015 EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html 1/4
SelectLanguage Poweredby Translate
el blog de Jos M. Aguilar Inicio El autor ContactarArtculos, noticias, curiosidades, reflexiones... sobre el mundo del desarrollo
de software, internet, u otros temas relacionados con la tecnologa
Tweet 2 2 12
Evitar el postback al pulsar un botn en ASP.Netmircoles, 28 de noviembre de 2007
De vez en cuando reviso las palabras por las que se llega a Variable Not Found a travs de los buscadores,ms que nada porque suelen reflejar dudas o problemas comunes de los desarrolladores y pueden servircomo inspiracin sobre nuevos temas a tratar en el blog.
Pues bien, llevo tiempo observando que hay muchas personas que preguntan a Google algo similar a "anularpostback en botn", es decir, se tienen dudas sobre cmo evitar el disparo del postback al pulsar un botnde un formulario ASP.Net. El tema me ha parecido tan interesante que intentar dar una respuesta a laduda estudiando algunas de las distintas posibilidades que pueden darse. Eso s, si echis en falta algncaso, no dudis en comentarlo y lo trataremos lo antes posible.
I. Hablamos de botones con lgica exclusivamente en cliente?
La primera cuestin es preguntarse para qu queremos un botn que no realice un postback al ser pulsado.Pensad que si todas las acciones desencadenadas por la pulsacin del botn se realizarn en cliente esposible que no necesitemos un control ASP.Net. Imaginemos, por ejemplo, un botn que queremos que hagaun clculo en el cliente y muestre un cuadro de alerta con el resultado... es necesario que sea un controlde servidor (runat="server")? Seguro que no.
Para este caso lo ms apropiado es incluir en el .aspx un HTML INPUT de los de toda la vida:
Si eres de los que prefieren arrastrar y soltar, puedes hacer exactamente lo mismo utilizando los controlesincluidos en la pestaa HTML de Visual Studio, en este caso el llamado Input(Button). El resultado visualser idntico al de un Button (un botn de servidor) y estaremos aligerando tanto la pgina enviada alcliente como la carga del servidor.
II. Anular el postback en un botn de servidor
Otra posibilidad es que vayas a usar un control de servidor (un Button, por ejemplo) y slo bajodeterminadas circunstancias quieras anular el postback desde el cliente. Obviamente, estas circunstanciasseran calculadas/obtenidas por script, por lo que podramos aplicar un patrn como el siguiente:
...
...
functioncomprueba(){returnconfirm("Confirmeelpostback");}
Como se puede observar, se ha modificado la propiedad OnClientClick del botn para hacer que retorne elresultado de la llamada a la funcin comprueba(). Si sta retorna cierto, se realizar el postback, mientrasque si retorna falso, no lo har. En el ejemplo anterior se permite al usuario decidir si desea enviar elformulario al servidor o no.
III. Anular la posibilidad de envos mltiples
Hay otras ocasiones, sin embargo, en las que estamos utilizando un botn de servidor de forma normal ysimplemente queremos evitar duplicidades en el envo del formulario, es decir, bloquear el botncorrespondiente una vez el usuario lo haya pulsado la primera vez.
Esto es muy habitual debido a la falta de feedback: el usuario enva el formulario, se impacienta esperandola respuesta o no est seguro de haberlo enviado, y cual poseso, inicia un ataque implacable sobre el botnde envo. A que os suena?
PrincipalInicioEl autorContactar
Archivo del blog2015 (19)2014 (83)2013 (88)2012 (90)2011 (111)2010 (87)2009 (74)2008 (90)2007 (83)
diciembre (10)noviembre (10)
Evitar el postback al pulsarun botn en ASP.Net
ConnectionStrings.com, lascadenas de conexin sie...
Otro uso para la arroba (@)en C#
Problemas al comentar elcdigo fuente
Interfaces fluidos (fluentinterfaces)
Postbacks entre pginasdiferentes en ASP.Net(Cro...
CTP de ASP.NET MVC enunas semanas
Diez cosas a saber sobreVisual Studio 2008 y .NET...
Aadir funciones conparmetros al eventoOnLoad (...
NiftyDotNet, redondear lasequinas de tus elemento...
octubre (9)septiembre (15)agosto (1)julio (9)junio (6)mayo (6)abril (5)marzo (5)febrero (3)enero (4)
2006 (39)
Top semanalOtras 101 citas clebres delmundo de la informticaEnlaces interesantes 191Evitar el postback al pulsarun botn en ASP.NetPasar variables de script aun Url.Action() oHtml.ActionLink()Y el Web.config de lacarpeta /Views en MVC 6?101 citas clebres delmundo de la informticajqGrid: Gridsespectaculares paraASP.NET MVC, paso a paso
Categoras.net (62)ajax (18)antispam (16)asp.net (154)aspnetmvc (177)auges (11)autobombo (27)blogging (53)buenas prcticas (26)
Paseelmouseparaexpandir
LaaventuravacontigoMis cursos
Variable social
Variablenotfound
A728personaslesgustaVariablenotfound.
PluginsocialdeFacebook
Megusta
Visitas en los ltimos 30 das
31,400Publicidad
MessageBox forASP.NETModalmessagebox/dialog forWeb Fullycustomizable,VB & C#sample
9Megusta
-
25/3/2015 EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html 2/4
Tweet 2 2 12
El comportamiento tpico, adoptado por la mayora de sitios web, es deshabilitar el botn y seguir con elpostback. Sin embargo, esto que podra ser realmente sencillo mediante scripting, causa algn que otroproblema cuando el botn es de tipo Submit, puesto que en determinados navegadores (por ejemplo IE6) norealizar el envo si lo est generando un botn deshabilitado. Una forma de evitar este problema es hacerque el botn no sea de tipo submit e incluir un pequeo script:
Si el botn debe ser obligatoriamente de tipo submit, se deben utilizar soluciones alternativas. Googleandoun poco he encontrado varias, como deshabilitar el botn pasadas unas dcimas de segundo mediante untimer, o retocar los estilos del botn para, simplemente, hacerlo desaparecer y mostrar en su lugar unmensaje informativo. La mejor, para mi gusto, consiste en capturar el evento onsubmit del formulario web,as:
...
...
functiondeshabilita(){varbtn="";if(confirm("Confirmepostback")){document.getElementById(btn).disabled=true;returntrue;}returnfalse;}
Este ltimo ejemplo lo he aprovechado para, adems, mostrar cmo es posible realizar la captura del envojusto antes de que se produzca, en el evento OnSubmit, e introducir las confirmaciones de envo ydeshabilitado de botones.
Publicado en Variable not found.
Estos contenidos se publican bajo una licencia de Creative Commons
Publicado por Jos M. Aguilar a las 9:20 p. m.
Etiquetas: asp.net, programacin, trucos, web
17 Comentarios:
Rub dijo...
Un artculo impecable :) como suele suceder en este blog, felicidades y gracias por el artculo,
lunes, 03 diciembre, 2007
Jos M. Aguilar dijo...
Nada, un placer. ;)
Y gracias a t por el comentario.
lunes, 03 diciembre, 2007
Pamela dijo...
Hola Jos super bueno tu comentario, me sirvio mucho ya que apenas estoy empezando en el mundode .net y el resto de articulos estan de lo mejor Medellin Colombia...
martes, 11 diciembre, 2007
Sharys Web dijo...Este comentario ha sido eliminado por el autor.mircoles, 12 diciembre, 2007
rosario camargo dijo...
hola sr. aguilar, muy buen articulo, asi ya uno no utiliza el updatepanel, porq se le tiene miedo, entremas cosas mas peligros...muchas gracias.
mircoles, 12 diciembre, 2007
Ciberpato dijo...
No he podido hacer funcionar "Anular el postback en un boton de servidor" ya que al escribir elatributo OnClientClick no lo reconoce
martes, 29 enero, 2008
c# (64)consultas (15)css (18)curiosidades (35)desarrollo (246)diseo (11)enlaces (187)estndares (12)eventos (23)frikadas (11)herramientas (23)historias (21)humor (22)javascript (30)jquery (18)microsoft (13)mono (15)noticias (30)novedades (74)patrones (17)personal (14)programacin (106)scripting (11)servicios online (37)signalr (15)software libre (11)spam (17)tecnologa (12)trucos (128)tcnicas de spam (12)vacaciones (14)variablenotfound.com (18)vb.net (24)vs2008 (28)web (52)xhtml (17)
9Megusta
-
25/3/2015 EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html 3/4
Jorgelig dijo...
Jos no eh podido hacer funcionar tu segundo ejemplo, deshabilitar el boton despues del primerclick.
No necesito confirmar, solo deshabilitar. El primer problema esque yo tengo el tag form en elMasterPage y un boton con el id: "btn_grabar", por lo que la linea donde le asignas el id la quite ypuse directo el id en el string. La cosa esque no me funciona.
Tengo esto:MasterPage: aspx://en el head**cript type="text/javascript">function deshabilita_btn(){var btn = "btn_grabar";document.getElementById(btn).disabled = true;}*/*cript> //en el body
aspx de uno de los formulario:
Pd los * son intencionales, no me deja publicar html
viernes, 26 diciembre, 2008
Jos M. Aguilar dijo...
Hola, Jorge.
El escenario que planteas es algo ms complejo. En primer lugar, el identificador del botn no sera"btn_grabar", pues ese es el nombre del control de servidor, pero no en cliente. De hecho, si miras enel cdigo fuente de la pgina generada, vers que el id asignado al botn es algo como"ctl00_ContentPlaceHolder1_btn_grabar".
Para obtener el identificador en cliente tendras que usar la propiedad ClientID del control deservidor, como en el ltimo ejemplo ().
Sin embargo, el hecho de intentar introducir directamente esta operacin en la MasterPage,provocar un error de compilacin, puesto que sta no es consciente de los controles que incluyensus hijas, y en el primer acceso te dir que el control no existe.
Tienes varias soluciones para este tema, pero la que creo ms sencilla es aadir unContentPlaceHolder en la seccin de la pgina maestra, y en el webform donde se encuentretu botn incluir el script en dicho placeholder. En esa pgina s podrs acceder al ClientID del control,y podrs implementar el script sin problema.
Espero que te sea de ayuda. :)
Un saludo y gracias por comentar.
viernes, 26 diciembre, 2008
Annimo dijo...
Lo que me gustaria saber es como hacer que ASP recuerde la posicion del formulario cuando hice clicen un boton que este asbajo en el fondo de la pagina. Es decir, que al refrescarse la pagina, no tengaque bajar con el scroll del raton de nuevo para ir a la posicion del form, para seguir metiendo datos.
David
lunes, 01 junio, 2009
Jos M. Aguilar dijo...
Hola.
Para conservar la posicin de vertical de la pgina, puedes establecer la propiedadMaintainScrollPositionOnPostback="true" en la directiva @Page.
Saludos.
lunes, 01 junio, 2009
Maicol8k dijo...
despues de ver los resultados quiero hacer un nuevo registro.. presiono un boton y me sale unmodalpopupextender.. y cuando estoy en el popup tengo un button que va agregando datos a un gridview.. pero ... solo me deja agregar uno , pues el popup desaparece y tengo que volver a cargar denuevo si quiero seguir agregando cosas en la grilla del popup ...como hacer para que no sedesvanesca el popup y seguir cargando mi gridview?
domingo, 05 febrero, 2012
-
25/3/2015 EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html 4/4
Entrada ms reciente Entrada antigua
Annimo dijo...
Hostia puta, despues de 5 horas investigando y probando con distintas opciones tan simple como lasegunda solucin que has dado, sencillamente genial. Nidocument.getElementById('ctl00_PlaceHolderMain_DatosPersonalesControl_EliminarEmpleado');, niobj.setAttributes(oncli...ni WebForm_DoPostBackWithOptions(newWebForm_PostBackOptions("ctl00$PlaceHolderMain$DatosPersonalesControl$EliminarEmpleado", "",true, "", "", false, false)), ni __doPostBack. Para hacer una llamada tras un confirm se aade en elonclick la llamada normal y en el onClientClick la llamada a return Confirmar() que devuelve la salidadel confirm. Gracias, despues de 5 aos sigue sirviendo el artculo ;)
mircoles, 26 septiembre, 2012
Jos M. Aguilar dijo...
:DD Genial!
mircoles, 26 septiembre, 2012
Juan Carrasco Moya dijo...
Muchas gracias por el artculo. Hay que ver con lo fcil que era y lo complejo que resulta a vecesencontrar esas cosas
martes, 25 junio, 2013
Emerson Silva Toro dijo...
Hola resulta que tengo un botn en ASP y cuando le doy click y ejecuto esto:Response.Redirect("FrmBuscarNombreAlmacen.aspx"), pero por lo del postback me limpia los textboxdel FrmBuscarNombreAlmacen.aspx y no se como ejecutar este mismo codigo ASP en un botn deHTML, podrias hacer un ejemplo de como ejecutar este mismo cdigo en el botn HTML. Graciasviejo.
jueves, 23 enero, 2014
Frank Jhonnathan Vergara Vergara dijo...
Eso no sirve para nada, porque tengamos un caso que querramos procesar por el lado del servidor,pero deseamos validar del lado del cliente, dependiendo si pasa la validacion que permita el procesodel lado del servidor de caso contrario que no pase al servidor.
viernes, 23 mayo, 2014
cine dijo...
Buenos das tengo un cdigo el cual es para realizar promedios entre valores 1 y 5, despus dellenarlo y hacer clic funciona, lo que sucede, es si nuevamente hago clic el promedio se va sumando,si me pueden ayudar como evito esto?. Gracias.(no pude colocar el cdigo)
domingo, 14 septiembre, 2014
Enviar un nuevo comentario
Backlinks:
Bloguea sobre este tema!
Pgina principal
Variable not found, 20062013 :: Usando Blogger :: Todos los contenidos son Creative Commons
SuperpoweredAudio Engine
Android, iOS and OSX LowLatency, Cross Platform Mobile