Invalid postback or callback argument.

Escrito por Roberto M. Oliva en Septiembre 11th, 2006

Trabajando con ASP.NET se me ha repetido varias veces esta excepción. La podía reproducir únicamente en las siguientes circunstancias:

  • Usando Internet Explorer (Curiosamente con Mozilla nunca se me ha producido).
  • Forzando un evento de la página cuando no se ha terminado de cargar completamente en el explorador.

La excepción completa muestra el siguiente mensaje:

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %>in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Buscando por Internet uno descubre que es una medida de seguridad implementada en ASP.NET 2.0 que consiste en una verificación de que los datos enviados en los controles coinciden con los que debe tener el control después del PostBack (supongo que comparándolos con los contenidos en el ViewState).
De esta manera se pretende asegurar que es el control que atiende al evento lanzado exactamente igual al que se renderizó la primera vez. Esto permite evitar lanzamiento de eventos por hackers y otros entes maliciosos que pretenden atacar nuestro código usando cross-site script injections.Microsoft ha decidido que este sistema de proteccion este activado por defecto, dejando al desarrollador la posibilidad de desactivarlo (poniendo la directiva de página: EnableEventValidation a False). De todas formas, lo mejor es ajustarse a este mecanismo ya que nos asegura un grado de protección de nuestro código mayor que si no lo utilizásemos.

Después del tiempo que llevo desarrollando con ASP.NET 2.0 he llegado a la conclusión de que un error de este tipo es evitable codificando bien la aplicaicón. Si nos paramos a ver el ciclo de eventos que realiza una página hasta llegar al evento de atención al control (por ejemplo OnClick de un botón) pasamos por OnInit, Load, y el OnClick (hay alguno mas entre medias). La primera vez que se carga la página (IsPostBack == false) nosotros somos los encargados de llenar los datos de los controles (se hace en el Load). Si, después de cargada la página por primera vez, pulsamos el botón, la página se recargará tomando los datos del ViewState (se hace dentro del OnInit asumiendo que lo tengamos así configurado), luego pasará por el Load, aunque ya no le cargaremos nosotros los datos a los controles (porque IsPostBack == true). Y finalmente llegará al OnClick. Si en diferentes recargas de página (forzados por eventos de los controles de la propia página), inicializamos los datos de los controles de diferentes maneras, estamos sacando muchos boletos para que nos toque la lotería de un Invalid Postback. Además: tiene sentido cargar los datos de manera diferente en cada recarga de página??



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

Gracias por la información, muy útil, me ahorraste un dolor de cabeza andar buscando este tipo de bugs por internet, lo consegui a la primera, grx un saludo

Hola.
Tu informe esta muy bueno.
Pero te cuento que tengo dos páginas aspx sin ningun codigo es decir el .vb no tiene nada de codigo es solo el XHTML del aspx. Cuando esta en ejecucion mi sitio y hago click en uno de los vinculos y antes que termine de cargar hago click en el otro vinculo sale el error que tu indicas.
¿Entonces cual seria la solución en este caso? Te agradeceria mucho tu ayuda

Hola. Te informo que la información publicada por tí me ha sido de gran ayuda… nunca pense que un error tan feo, se solucionaria con EnableEventValidation =”false”. sin nada mas que decir…. muchas gracias…

Excelente aportación compañero realmente este información me ha ayudado mucho con el sitio web que he diseñado en el cual me apareció este error

muchas gracias por tu info.

Gracias, muy bueno!!!

Muchas gracias, muy útil, ya estaba que tiraba la toalla.

Muy buena la información.

what a nice site. i like it, yeah, I do!)))

Great site you’ve got! I bet you’re professionals!

ein was fur netter Aufstellungsort. ich mag es yeah mich!

Great site you’ve got! I bet you’re professionals!

Ringraziamenti molto! Lo avete aiutato molto!

the webmaster RULLLLES!!

luogo grande, disegno piacevole….O

Here is much work done, obviously. Good site

sto andando dire ai miei amici circa questo luogo - ? solo perfetto!

Great site, nice design

could it be it? i was searching for information needed for such a long time. Thank you!

Here is much work done, obviously. Good site

Ist hier viel erledigte Arbeit, offensichtlich. Guter Aufstellungsort !~

i am going to tell my friends about this site - it’s just perfect!

Aucuns doutes c’est une bonne page..

Luogo che grande avete ottenuto! Scommettevo che siete professionisti!