2008-11-16 51 views
13

Recibo el siguiente error cuando ocurre un evento (Agregar/Editar/Eliminar) en mi control de datos."Postback no válido o argumento de devolución de llamada" con controles Databound

No válido postback o argumento de devolución de llamada. La validación de eventos se habilita usando la configuración o <% @ Página EnableEventValidation = "true"%> en una página . Por razones de seguridad, esta característica verifica que los argumentos para eventos de devolución de datos o de devolución de llamada se originan en desde el control del servidor que originalmente los prestó. Si los datos son válidos y esperados, utilice el método ClientScriptManager.RegisterForEventValidation para registrar devolución de datos o datos de devolución de llamada para la validación .

Estoy utilizando un control personalizado DataList, pero este problema también ocurre con control GridView, DetailsView, FormView y Repeater (y tal vez con otros controles de datos).

Las respuestas que puedo encontrar me dicen que apague la validación en el archivo o página de configuración, pero eso no parece ser la mejor solución. ¿Qué estoy haciendo mal?

Respuesta

24

El problema es cargar los datos para el control en la página Cargar evento y llamar al método DataBind(). Sin embargo, parece que si se llama al método DataBind() antes de que se generen los eventos, la excepción anterior se genera cuando la denominación de control ha cambiado.

La solución es cambiar esto a if (! IsPostback) DataBind() y luego llamar al método DataBind() al final del controlador de eventos. Debería llamarlo la mayor parte del tiempo al final del controlador para afectar los cambios.

Si este no es su problema, y ​​está modificando los controles del lado del cliente usando JavaScript, revise this article.

Esta es una publicación autocompuesta ya que recibía muchas respuestas en mi blog sobre este tema y pensé que podría compartirla más.

6

Gracias por esto. Me enfrento a este problema y tu respuesta personal me ayudó a solucionarlo.

Una alternativa para llamar al método DataBind() al final de cada controlador de eventos, es hacerlo una vez en el evento PreRender de la página.

3

Estaba teniendo el mismo problema y me tomó algunas horas resolver mi problema. La respuesta de Robert me ayudó en parte y, a pesar de que mi repetidor estaba conectado a mi repetidor, independientemente de si el mensaje estaba publicado o no, el problema persistía. Después de mucha investigación me encontré con una publicación que sugería establecer UseSubmitBehavior = "false", bingo y resolvió el problema. Espero que esto ayude.

Cuestiones relacionadas