4
Select Language Powered by Transla el blog de José M. Aguilar Inicio El autor Contactar Artículos, noticias, curiosidades, reflexiones... sobre el mundo del desarrollo de software, internet, u otros temas relacionados con la tecnología Tweet 2 2 12 Evitar el postback al pulsar un botón en ASP.Net miércoles, 28 de noviembre de 2007 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? Principal Inicio El autor Contactar Archivo del blog 2015 (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 pulsar un botón en ASP.Net ConnectionStrings.com, las cadenas de conexión sie... Otro uso para la arroba (@) en C# Problemas al comentar el código fuente Interfaces fluidos (fluent interfaces) Postbacks entre páginas diferentes en ASP.Net (Cro... CTP de ASP.NET MVC en unas semanas Diez cosas a saber sobre Visual Studio 2008 y .NET... Añadir funciones con parámetros al evento OnLoad (... NiftyDotNet, redondear las equinas 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 semanal Otras 101 citas célebres del mundo de la informática Enlaces interesantes 191 Evitar el postback al pulsar un botón en ASP.Net Pasar variables de script a un Url.Action() o Html.ActionLink() ¿Y el Web.config de la carpeta /Views en MVC 6? 101 citas célebres del mundo de la informática jqGrid: Grids espectaculares para ASP.NET MVC, paso a paso Categorías .net (62) ajax (18) antispam (16) asp.net (154) aspnetmvc (177) auges (11) autobombo (27) blogging (53) buenas prácticas (26) Pase el mouse para expandir La aventura va contigo Mis cursos Variable social Variable not found A 728 personas les gusta Variable not found. Plugin social de Facebook Me gusta Visitas en los últimos 30 días 31,400 Publicidad Message Box for ASP.NET Modal message box/dialog for Web Fully customizable, VB & C# sample 9 Me gusta

Evitar El Postback Al Pulsar Un Botón en ASP

Embed Size (px)

DESCRIPTION

tip

Citation preview

  • 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