2009-10-01 13 views
21

He utilizado el siguiente en web.configpropósito para páginas <EnableEventValidation = "false">

<pages enableEventValidation="false"> 

Esto corrige un problema que hemos tenido con el Ajax.

Tenemos una página web que si navegas directamente usando un hipervínculo HTML estándar funciona bien.

Si navega a la página desde otra página a través del enlace dentro de un gridview y response.redirecting en el evento RowCommand a la página que pasa una identificación en la cadena de consulta. La página arroja errores de los controles dentro del panel que indica

"Rechazo no válido o argumento de devolución de llamada. La validación de eventos se habilita mediante configuración o <% @ Página EnableEventValidation =" true "%> en una página. comprueba que los argumentos para devolución de datos o eventos de devolución de llamada se originan en el control del servidor que originalmente los prestó. Si los datos son válidos y esperados, utilice el método ClientScriptManager.RegisterForEventValidation para registrar la devolución de datos o la devolución de datos para validación. "

I Estoy feliz de dejar la validación de la página como falsa, ya que parece que no tuvo ningún otro efecto.

¿Alguna idea de lo que está pasando?

+0

Encontré [esta respuesta] (http://stackoverflow.com/a/9104931/1178314) en una pregunta dupe para ser bastante buena y falta aquí. –

Respuesta

12

Lea el documentation.

EDIT: Por razones de seguridad, es mejor dejarlo configurado en true siempre que sea posible.

Por lo tanto, le recomiendo que lo configure como falso solo en las páginas AJAX individuales donde causa problemas, y lo deja en verdadero en web.config.

+1

Lo leí, por supuesto, pero encontré que la explicación limitada solo me llevó a creer que no tendría problemas para configurar esto en falso, a menos que alguien intencionalmente intentara ser malicioso, pero no sugiere que el resto de las páginas ahora se comporte de manera diferente. . De eso supongo que es seguro para mí dejarlo como falso. La aplicación en la intranet y no temo los ataques maliciosos. – Robert

+0

Después de un poco más de investigación voy con el EDIT sugerido. Tiene sentido para la aplicación y ahora está cantando dulcemente otra vez, todo ajaxed. – Robert

+0

¿Entonces puedes eliminar tu voto negativo? – SLaks

6

De here

no válida o error PostBack argumento de devolución de llamada es básicamente debido a la característica elevar Evento de validación. La característica EventValidation es una característica nueva en ASP.NET 2.0 y proporciona un nivel adicional de comprobaciones para verificar que una devolución de datos desde un control en el cliente proviene realmente de ese control y no de alguien malintencionado que usa algo así como una inyección de script entre sitios. para tratar de manipular cosas Es parte de nuestra estrategia general de aumentar cada vez más la seguridad en los niveles de profundidad del modelo de programación, de modo que los desarrolladores puedan estar seguros por defecto incluso si olvidan agregar sus propios controles de seguridad.

Ahora, no válida PostBack o argumento de respuesta de error se puede producir cuando se está disparando evento click y el objeto es reencuadernación o sus propiedades se cambian en el evento Page_Load o alguien está tratando de cortar en su sistema con este tipo de ataque. Cada vez que .Net Framework renderiza una página, asocia una Guía única para todos los controles. Al enlazar un gridview o un repetidor, en cada marco de enlace de datos se asociará un nuevo guid para el contorl. Así que, cada vez que esté disparando, asegúrese de que el evento Page_Load no cambie el control, ya que si el control cambia, tendrá un Guid diferente que activará el evento para la devolución. Aquí hay algunas situaciones con este error.

1) Argumento de devolución de llamada o de devolución de llamada inválido en GridView El problema puede ser: Está vinculando datos en el evento Page_Load con origen de datos de objeto o enlace manual con llamada de función. Esto hará que su GridView enlace datos en cada evento de disparo de cualquier control.Cuando está disparando un comando GridView con OnRowCommand, antes de que RowCommand se active, su GridView se volverá a vincular y todo el control dentro de él se asignará a un nuevo ID. Entonces, RowCommand no pudo obtener el elemento que ha disparado el evento. Solución para la devolución de datos no válido o argumento de devolución de llamada en GridView: Puede enlazar sus datos dentro de esta condición si

if (!IsPostBack) 

    { 

      //Your code for Bind data 

    } 

Este código será definitivamente darle solución si esto no funciona, entonces comprobar si cualquier otro control no está dando error.

+0

Gracias por la entrada que he leído sobre esto, pero el esfuerzo por la relación de resultados no fue bueno;) Gracias – Robert

3

Hay una cosa que vale la pena añadir aquí: Si desea desactivar la validación de eventos para un control específico, en lugar de toda la página, hay una solución documentada here y here (y ahora se hace referencia en el relevant Connect suggestion):

Simplemente haga una subclase de la clase relevante de WebControl y no configure el atributo SupportsEventValidation en la subclase. La subclase estará exenta de la validación de eventos.

+0

Votación hacia arriba para enlaces a la explicación clara :) –

Cuestiones relacionadas