Hoy me he encontrado, de nuevo, con otro comportamiento extraño del componente RadGrid, de Telerik. Al parecer el manejador AJAX que incorpora de manera nativa tiene algún problema con las últimas versiones de Firefox. Al reportar un cliente esta circunstancia, el primer intento (y fallido) fue desactivar ésta propiedad. Al fin y al cabo, el postback en este caso no era un problema tan grande.
Sin embargo, como no podía ser de otro modo, la cosa se complicó. Al pulsar sobre uno de los controles de servidor alojados en el componente se producía la conocida excepción:
Argumento de devolución o de devolución de llamadas no válido. La validación de eventos se habilita usando <pages enableEventValidation=”true”/> en la configuración o <%@ Page EnableEventValidation=”true” %> en una página. Por motivos de seguridad, esta característica comprueba que los argumentos pasados a eventos de devolución o de devolución de llamadas se origina desde el control del servidor que inicialmente los procesó. Si los datos son válidos y son los que se esperaba, utilice el método ClientScriptManager.RegisterForEventValidation para registrar los datos de devolución o de devolución de llamadas para su validación.
Como se puede consultar en la MSDN, de manera predefinida todos los controles registran los eventos que causan postbacks de manera que puedan ser validados, reduciendo de este modo la posibilidad de que se produzcan peticiones al servidor que puedan causar un comportamiento no contemplado. No obstante, aunque no se debe desactivar, lo hice para probar el comportamiento del formulario web. Todos los controles de tipo servidor (runat=server) no lanzaban su evento de manera correcta.
Después de buscar un poco en Google, encontré la solución en el foro de la empresa:
http://www.telerik.com/community/forums/aspnet/ajax/invalid-postback-callback-argument.aspx
El problema estaba en que había una porción de código fuera de la siguiente comprobación:
1: if (!this.Page.IsPostBack())
2: {
3: this.Cargar();
4: }
5:
6: this.CargarSiempre();
Al parecer este código no protegido por la comprobación modificaba de algún modo la colección de controles que albergaba el RadGrid lo cual causaba que fallase la validación que se producía a posteriori. La solución en este caso ha resultado bastante sencilla y ha consistido en incluir todo el código dentro del If. De hecho, el motivo de que estuviera fuera era que se procesara en todas las peticiones a la web, también en las que se realizan mediante AJAX.
Espero que os sirva de ayuda.
El día 24 de Marzo se celebra el Asegur@IT 7 en la ciudad de Barcelona, evento organizado por Informatica 64. Es llamativa la charla de Leo Nve y Christian Martorella sobre hacking en entornos de comunicaciones basados en satélites. Ha salido publicado en Forbes:
- http://www.forbes.com/2010/02/02/hackers-cybercrime-cryptography-technology-security-satellite.html
Buscando en internet se puede encontrar más material.


