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: , , , ,

Comments

Juan Carlos
Juan Carlos Colombia
10/24/2009 3:41:56 AM Permalink

Hola Ferran.

A mi el error me sucede con el control ListView cuando trato de hacer la paginacion, si hago lo que dices de solo llenar el control la primera vez que se carga la pagina, el control siempre se queda mostrando el primer grupo de resultados que se visualizaron.

si sabes algo de este error en este escenario te agradeceria mucho tu ayuda.

Antonio Gago
Antonio Gago Spain
11/18/2009 11:47:28 PM Permalink

Hola,

me he encontrado con problemas similares con otros controles.
Lo que yo hago en el evento Page_Load es utilizar la pregunta if not page.IsPostBack then e introducir el código que quiero que se ejecute al cargar la página la primera vez.
En el caso que indica Juan Carlos se podría utilizar en el evento que ejecuta GridView1.DataBind para que actualice el contenido del GridView.

un saludo.

Ferran Chopo
Ferran Chopo Spain
11/22/2009 6:25:43 PM Permalink

Hola Juan Carlos,
En tu caso intentaría sustituir el ListView por un GridView, e implementar la misma funcionalidad. El GridView te va a dar mayor flexibilidad como, por ejemplo, paginar.
Igualmente, si quieres seguir usando el ListView, en el evento Page_Load de la página sólo deberías detectar si el PostBack te viene por un evento distinto a la páginación.
Ya me dirás si lo pudiste resolver.

Saludos.

PD: Antonio, ¡muchas gracias por tu aportación!

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading