You are on page 1of 4

25/3/2015

EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound

el blog de Jos M. Aguilar

Inicio

El autor

Contactar

Artculos, noticias, curiosidades, reflexiones... sobre el mundo del desarrollo


de software, internet, u otros temas relacionados con la tecnologa
SelectLanguage

Principal

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 botn en ASP.Net

Paseelmouseparaexpandir

Evitar el postback al pulsar un botn en ASP.Net


mircoles, 28 de noviembre de 2007
Megusta

Tweet

12

Problemas al comentar el
cdigo fuente

Pues bien, llevo tiempo observando que hay muchas personas que preguntan a Google algo similar a "anular
postback en botn", es decir, se tienen dudas sobre cmo evitar el disparo del postback al pulsar un botn
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 echis en falta algn
caso, no dudis en comentarlo y lo trataremos lo antes posible.
Variablenotfound
Megusta

I. Hablamos de botones con lgica exclusivamente en cliente?

Postbacks entre pginas


diferentes en ASP.Net
(Cro...

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 es
posible que no necesitemos un control ASP.Net. Imaginemos, por ejemplo, un botn que queremos que haga
un clculo 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.

CTP de ASP.NET MVC en


unas semanas

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

Interfaces fluidos (fluent


interfaces)

Diez cosas a saber sobre


Visual Studio 2008 y .NET...
Aadir funciones con
parmetros 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)

<inputid="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 pestaa HTML de Visual Studio, en este caso el llamado Input(Button). El resultado visual
ser idntico al de un Button (un botn de servidor) y estaremos aligerando tanto la pgina enviada al
cliente 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 bajo
determinadas circunstancias quieras anular el postback desde el cliente. Obviamente, estas circunstancias
seran calculadas/obtenidas por script, por lo que podramos aplicar un patrn como el siguiente:

2006 (39)

Top semanal
Otras 101 citas clebres del
mundo de la informtica
Enlaces interesantes 191
Evitar el postback al pulsar
un botn 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 clebres del
mundo de la informtica
jqGrid: Grids
espectaculares para
ASP.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)

Variable social

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 servir
como inspiracin sobre nuevos temas a tratar en el blog.

ConnectionStrings.com, las
cadenas de conexin sie...
Otro uso para la arroba (@)
en C#

Translate

Mis cursos

Laaventuravacontigo

Inicio
El autor
Contactar

Poweredby

...
<asp:ButtonID="Button1"runat="server"
Text="Pulsa"
OnClientClick="returncomprueba();"/>
...
<scripttype="text/javascript">
functioncomprueba(){
returnconfirm("Confirmeelpostback");
}
</script>

Como se puede observar, se ha modificado la propiedad OnClientClick del botn para hacer que retorne el
resultado de la llamada a la funcin 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.

A728personaslesgustaVariable
notfound.

PluginsocialdeFacebook

Visitas en los ltimos 30 das

31,400
Publicidad

Message
Box for
ASP.NET
Modal
message
box/dialog for
Web Fully
customizable,
VB & C#
sample

III. Anular la posibilidad de envos mltiples


Hay otras ocasiones, sin embargo, en las que estamos utilizando un botn de servidor de forma normal y
simplemente queremos evitar duplicidades en el envo del formulario, es decir, bloquear el botn
correspondiente 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 esperando
la respuesta o no est seguro de haberlo enviado, y cual poseso, inicia un ataque implacable sobre el botn
de envo. A que os suena?

http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html

1/4

25/3/2015
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)

EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
El comportamiento tpico, adoptado por la mayora de sitios web, es deshabilitar el botn y seguir con el
postback. Sin embargo, esto que podra ser realmente sencillo mediante scripting, causa algn que otro
problema cuando el botn es de tipo Submit, puesto que en determinados navegadores (por ejemplo IE6) no
realizar el envo si lo est generando un botn deshabilitado. Una forma de evitar este problema es hacer
que el botn no sea de tipo submit e incluir un pequeo script:
<asp:ButtonID="Button2"runat="server"
Text="Pulsa"
OnClientClick="this.disabled=true"
UseSubmitBehavior="False"/>

Si el botn debe ser obligatoriamente de tipo submit, se deben utilizar soluciones alternativas. Googleando
un poco he encontrado varias, como deshabilitar el botn pasadas unas dcimas de segundo mediante un
timer, o retocar los estilos del botn 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:
...
<formid="form1"runat="server"onsubmit="deshabilita()">
...
<scripttype="text/javascript">
functiondeshabilita()
{
varbtn="<%=Button1.ClientID%>";
if(confirm("Confirmepostback"))
{
document.getElementById(btn).disabled=true;
returntrue;
}
returnfalse;
}
</script>

Este ltimo ejemplo lo he aprovechado para, adems, mostrar cmo es posible realizar la captura del envo
justo antes de que se produzca, en el evento OnSubmit, e introducir las confirmaciones de envo y
deshabilitado de botones.
Publicado en Variable not found.
Megusta

Tweet

12

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 mundo
de .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, entre
mas 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 el
atributo OnClientClick no lo reconoce
martes, 29 enero, 2008

http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html

2/4

25/3/2015

EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
Jorgelig dijo...
Jos no eh podido hacer funcionar tu segundo ejemplo, deshabilitar el boton despues del primer
click.
No necesito confirmar, solo deshabilitar. El primer problema esque yo tengo el tag form en el
MasterPage y un boton con el id: "btn_grabar", por lo que la linea donde le asignas el id la quite y
puse 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
<*orm id="form1" runat="server" onsubmit="deshabilita_btn()">
aspx de uno de los formulario:
<*sp:Button ID="btn_grabar" runat="server" CssClass="cssboton" Text="Button"/>
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 en
el 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 de
servidor, como en el ltimo ejemplo (<%= btn_grabar.ClientID %>).
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 incluyen
sus 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 un
ContentPlaceHolder en la seccin <head> de la pgina maestra, y en el webform donde se encuentre
tu 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 clic
en un boton que este asbajo en el fondo de la pagina. Es decir, que al refrescarse la pagina, no tenga
que 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 propiedad
MaintainScrollPositionOnPostback="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 un
modalpopupextender.. y cuando estoy en el popup tengo un button que va agregando datos a un grid
view.. pero ... solo me deja agregar uno , pues el popup desaparece y tengo que volver a cargar de
nuevo si quiero seguir agregando cosas en la grilla del popup ...como hacer para que no se
desvanesca el popup y seguir cargando mi gridview?
domingo, 05 febrero, 2012

http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html

3/4

25/3/2015

EvitarelpostbackalpulsarunbotnenASP.Net|Variablenotfound
Annimo dijo...
Hostia puta, despues de 5 horas investigando y probando con distintas opciones tan simple como la
segunda solucin que has dado, sencillamente genial. Ni
document.getElementById('ctl00_PlaceHolderMain_DatosPersonalesControl_EliminarEmpleado');, ni
obj.setAttributes(oncli...
ni WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("ctl00$PlaceHolderMain$DatosPersonalesControl$EliminarEmpleado", "",
true, "", "", false, false)), ni __doPostBack. Para hacer una llamada tras un confirm se aade en el
onclick la llamada normal y en el onClientClick la llamada a return Confirmar() que devuelve la salida
del 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 veces
encontrar 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 textbox
del FrmBuscarNombreAlmacen.aspx y no se como ejecutar este mismo codigo ASP en un botn de
HTML, podrias hacer un ejemplo de como ejecutar este mismo cdigo en el botn HTML. Gracias
viejo.
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 proceso
del 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 de
llenarlo 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!

Superpowered
Audio Engine
Android, iOS and OSX Low
Latency, Cross Platform Mobile

Entrada ms reciente

Pgina principal

Entrada antigua

Variable not found, 20062013 :: Usando Blogger :: Todos los contenidos son Creative Commons

http://www.variablenotfound.com/2007/11/evitarelpostbackalpulsarunbotnen.html

4/4

You might also like