domingo, 8 de enero de 2012

Error ASP.NET, enableEventValidation

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.

Este error es común para aquellos programadores que gustan de hacer cosas con javascript y .Net a la vez, justificado está el uso de estas dos tecnologías en conjunto, crean cosas fabulosas.


Bien, este error ocurre cuando se ejecuta algún script (pudiera ser javascript) provocado por algún control asp, que no haya sido controlado directamente por el servidor. Esto es por ejemplo, imagina que tenemos esto:

<asp:DropDownList ID="DropDownList_Region" onchange="LlenaPlanta();" runat="server"></asp:DropDownList>



Como observamos este posee un evento Javascript llamado "LlenaPlanta();", pero el control corre en el servidor (runat="server"), cuando seleccionemos algo de la DropDownList se ejecutará el evento LlenaPlanta() en el cliente cuantas veces se haga, el problema es cuando ocurre un PostBack por cualquier motivo, el server detecta que se han ejectado eventos en el control DropDownList_Region y que no han sido controlados por éste y por tanto manda un error. Esto para prevenir que cualquier tipo quiera hacer un postback en nuestra web y mandar datos no permitidos por post o get.


Bueno, lo más rápido pero menos recomendable es desactivar la protección, aunque lo recomendable es no hacerlo, aquí colocaré la manera de desactivarla:


Desactivar EventValidation

  1. Entra a Web.config
  2. Busca la etiqueta <pages>
  3. Agrega los siguientes atributos de tal manera que quede así: <pages enableEventValidation="false" validateRequest="false">



El error de validación no debería aparecer pero tu Web quedará menos segura que ayer, ;).


=)

Fuentes:

10 comentarios:

  1. ¿Y la segura cuál es?

    ResponderEliminar
    Respuestas
    1. Es un secreto milenario que hasta ahora ni los mas expertos programadores han descubierto!!

      Eliminar
  2. Espero que haya alguna solución ante este problema (de manera segura), por que desarrollar un sistema vulnerable ,,, :c

    ResponderEliminar
    Respuestas
    1. Estoy seguro que debe haberla Roger Martinez, pero aun no he tratado lo suficiente =P

      Eliminar
  3. Muchas gracias me sirvió mucho

    ResponderEliminar
  4. si mi web.config no posee la etiqueta

    ResponderEliminar