EnableEventValidation en GridView

Escribo rápidamente este post para explicaros un problema que me he encontrado hoy desarrollando una aplicación web ASP.NET 2.0 con AJAX. Resulta que tengo GridView que muestra una lista de ficheros, y donde al lado de cada uno de ellos aparece un icono para eliminarlos. Al hacer click sobre el icono, se debe eliminar el fichero asociado, y se debe volver a cargar el GridView con la lista actualizada.

Ficheros

Pues ejecutando la acción de borrado, me aparece el siguiente mensaje de error:

“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.”

Buscando en la web encontré múltiples soluciones, sin que ninguna sea suficientemente clara. De hecho, en muchos casos se comenta que la mejor opción es modificar la página o el fichero web.config y asignar el valor true al atributo enableEventValidation. Nada más lejos de la realidad…

El problema se produce porqué el GridView se intenta cargar de nuevo con los datos provenientes de la consulta en el evento Page_Load, sin contemplar la posibilidad de si se proviene o no de un PostBack. En definitiva, la solución consiste en cargar los datos del GridView sólo si es la primera vez que accedemos a la página:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
If Not Page.IsPostBack Then
MostrarResultadoBusquedaFicheros()
End If
End Sub

Así que nos os compliquéis con soluciones difíciles si tenéis este problema con el GridView.
 
¡Espero que os sirva!

Tags: , , , ,

Microsoft DevLabs

Actualmente estoy finalizando un proyecto desarrollado con ASP.NET 2.0 y AJAX, en el que me he encontrado multitud de problemas, pero sobre todo, me ha ayudado a comprender la tecnología AJAX, como aplicarla y qué ventajas e inconvenientes presenta. De hecho, la aplicación empezó cubriendo unas necesidades, que a medida que avanzaba el proyecto, se fueron ampliando. En definitiva, la aplicación se ha convertido en un conjunto de páginas con algunos de los controles presentes en el AJAX Control Toolkit (conjunto de controles con funciones predefinidas y que ayudan a mejorar la usabilidad de las aplicaciones web), pero que se cargan demasiado lentamente.

Investigando un poco descubrí Doloto, o lo que es lo mismo, Download time optimizer for Web 2.0 applications. Doloto es una aplicación desarrollada por Microsoft que permite reducir el código de las aplicaciones que usan AJAX hasta un 40%, permitiendo que la página inicial de la aplicación se cargue entre un 30% y un 40% más rápido de lo que lo hace actualmente, y en definitiva, mejorando el rendimiento de la aplicación.

Doloto 

A partir de la web del producto (totalmente gratuïto), descubrí la página DevLabs de Microsoft, donde se presentan productos para mejorar los procesos de desarrollo de software basados en su tecnología. Además de Doloto presentan otros proyectos interesantes como Small Basic (un versión muy reducida de Visual Basic destinada a aquellos que quieran empezar a programar), o PEX (herramienta de automatización de pruebas).

¡Espero que os sirva!

Tags: , , , , ,