Recibo el siguiente error cuando publico una página desde el lado del cliente. Tengo un código JavaScript que modifica un asp: ListBox en el lado del cliente.
¿Cómo arreglamos esto?
Detalles del error a continuación:
Server Error in '/XXX' Application.
--------------------------------------------------------------------------------
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
Respuestas:
El problema es que ASP.NET no conoce este elemento de lista adicional o eliminado. Tienes varias opciones (enumeradas a continuación):
Espero que esto ayude.
fuente
¿Tiene códigos en sus eventos Page_Load? en caso afirmativo, tal vez agregando lo siguiente ayudará.
Este error se produce cuando hace clic en su comando y Page_load se está ejecutando nuevamente, en un ciclo de vida normal será Page_Load -> Haga clic en Command -> Page_Load (nuevamente) -> Proceso ItemCommand Event
fuente
Tuve una experiencia con DataGrid. Una de sus columnas fue el botón "Seleccionar". Cuando estaba haciendo clic en el botón "Seleccionar" de cualquier fila, recibí este mensaje de error:
Cambié varios códigos y finalmente lo logré. Mi ruta de experiencia:
1) Cambié el atributo de página a
EnableEventValidation="false"
. Pero no funcionó. (no solo es peligroso por razones de seguridad, mi controlador de eventos no fue llamado:void Grid_SelectedIndexChanged(object sender, EventArgs e)
2) Implementé
ClientScript.RegisterForEventValidation
en el método Render. Pero no funcionó.3) Cambié mi tipo de botón en la columna de cuadrícula de
PushButton
aLinkButton
. ¡Funcionó! ("ButtonType =" LinkButton "). Creo que si puede cambiar su botón a otros controles como" LinkButton "en otros casos, funcionaría correctamente.fuente
Button
no funciona cuandolinkButton
se trabaja en el mismo programa. Si es así, ¿deberíamos usar siemprelinkButton
? ¿Cómo podríamos hacer más flexible?Realmente querrá hacer 2 o 3, no deshabilite la validación de eventos.
Hay dos problemas principales al agregar elementos a un asp: listbox del lado del cliente.
La primera es que interfiere con la validación de eventos. Lo que regresó al servidor no es lo que envió.
El segundo es que incluso si deshabilita la validación de eventos, cuando su página se vuelva a publicar, los elementos en el cuadro de lista se reconstruirán desde el estado de visualización, por lo que se perderán los cambios que haya realizado en el cliente. La razón de esto es que asp.net no espera que el contenido de un cuadro de lista se modifique en el cliente, solo espera que se realice una selección, por lo que descarta cualquier cambio que pueda haber realizado.
La mejor opción es usar un panel de actualización como se ha recomendado. Otra opción, si realmente necesita hacer este lado del cliente, es usar un viejo y simple en
<select>
lugar de uno<asp:ListBox>
, y mantener su lista de elementos en un campo oculto. Cuando la página se representa en el cliente, puede completarla desde una división de los contenidos de su campo de texto.Luego, cuando esté listo para publicarlo, repoblará el contenido del campo oculto de su modificado
<select>
. Luego, por supuesto, debe dividirlo nuevamente en el servidor y hacer algo con sus elementos, ya que su selección está vacía ahora que está de vuelta en el servidor.En general, es una solución bastante engorrosa que realmente no recomendaría, pero si realmente tiene que hacer modificaciones del lado del cliente de un listBox, funciona. Sin embargo, realmente recomendaría que busques en un UpdatePanel antes de seguir esta ruta.
fuente
<select>
, que resolvió el problema. ¿Puede decirme por qué Updatepanel está tardando tanto en cargar datos en comparación con la carga de datos ajax del lado del cliente?Tuve el mismo problema con un repetidor porque tenía una página web con un control de repetidor en un sitio web que tenía EnableEventValidation activado. No estuvo bien. Recibía excepciones relacionadas con la devolución de datos no válida.
Lo que funcionó para mí fue configurar EnableViewState = "false" para el repetidor. Las ventajas son que es más fácil de usar, tan simple como desactivar la validación de eventos para el sitio web o la página web, pero el alcance es mucho menor que desactivar la validación de eventos para cualquiera.
fuente
Nada de lo anterior funcionó para mí. Después de más excavaciones, me di cuenta de que había pasado por alto 2 formularios aplicados en la página que causaban el problema.
Tenga en cuenta que recientemente ASP.NET ha comenzado a considerar los marcos flotantes dentro de una etiqueta de formulario que contiene una etiqueta de formulario en el documento de marco flotante en sí mismo como un marco anidado. Tuve que mover el iframe fuera de la etiqueta del formulario para evitar este error.
fuente
Tuve el mismo problema al modificar un ListBox usando JavaScript en el cliente. Ocurre cuando agrega nuevos elementos al ListBox desde el cliente que no estaban allí cuando se renderizó la página.
La solución que encontré es informar al sistema de validación de eventos de todos los elementos válidos posibles que se pueden agregar desde el cliente. Para ello, anula Page.Render y llama a Page.ClientScript.RegisterForEventValidation para cada valor que su JavaScript pueda agregar al cuadro de lista:
Esto puede ser una molestia si tiene una gran cantidad de valores potencialmente válidos para el cuadro de lista. En mi caso, estaba moviendo elementos entre dos ListBoxes, uno que tiene todos los valores posibles y otro que está inicialmente vacío pero se completa con un subconjunto de los valores del primero en JavaScript cuando el usuario hace clic en un botón. En este caso, solo necesita recorrer los elementos del primer ListBox y registrar cada uno con el segundo cuadro de lista:
fuente
Otra forma no mencionada aquí es la subclase ListBox
Es decir.
ClientEventValidation elimina el atributo System.Web.UI.SupportsEventValidation si lo subclasifica, a menos que lo vuelva a agregar explícitamente, nunca llamará a la rutina de validación. Eso funciona con cualquier control, y es la única forma en que he encontrado "deshabilitarlo" control por control (es decir, no a nivel de página).
fuente
intentas algo así, en tu página .aspx
añadir
¡siéntase libre de hacer cualquier pregunta!
fuente
Si completa la Lista desplegable a través del script del lado del cliente, borre la lista antes de enviar el formulario nuevamente al servidor; entonces ASP.NET no se quejará y la seguridad seguirá activa.
Y para obtener los datos seleccionados del DDL, puede adjuntar un evento "OnChange" al DDL para recopilar el valor en una entrada oculta o en un cuadro de texto con Style = "display: none;"
fuente
Desearía poder votar, Amir (por desgracia, mi reputación es demasiado baja). Estaba teniendo este problema y cambiarlo funcionó como un campeón en mi vista de cuadrícula. Solo un poco aparte, creo que el código válido es: ButtonType = "Link"
Sospecho que esto se debe a que cuando hace clic en 'editar', su edición cambia a 'actualizar' y 'cancelar', que luego vuelve a 'editar' al enviar. Y estos controles cambiantes incomodan a .net.
fuente
(1) EnableEventValidation = "false" ................... No me funciona.
(2) ClientScript.RegisterForEventValidation ... No me funciona.
Solución 1:
Cambie Button / ImageButton a LinkButton en GridView. Funciona. (Pero me gusta ImageButton)
Investigación: Button / ImageButton y LinkButton usan diferentes métodos para devolver
Artículo original:
http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
Solución 2:
En OnInit (), ingrese el código más o menos así para establecer una identificación única para Button / ImageButton:
Artículo original:
http://www.c-sharpcorner.com/Forums/Thread/35301/
fuente
Implementé una vista de cuadrícula anidada y me enfrenté al mismo problema. He usado LinkButton en lugar del botón de imagen como este:
antes de tener una columna como esta:
He reemplazado así.
fuente
Tuve un problema similar, pero no estaba usando ASP.Net 1.1 ni actualizando un control a través de javascript. Mi problema solo ocurrió en Firefox y no en IE (!).
Agregué opciones a un DropDownList en el evento PreRender como este:
Mi "HF" (campo oculto) tenía las opciones separadas por la nueva línea, así:
El problema era que la página HTML estaba rota (es decir, tenía nuevas líneas) en las opciones de "seleccionar" que representaba DropDown.
Entonces resolví mi problema agregando una línea:
Espero que esto ayude a alguien.
fuente
si cambias
UseSubmitBehavior="True"
aUseSubmitBehavior="False"
tu problema se resolveráfuente
He tenido el mismo problema, lo que hice:
Acabo de agregar una condición
if(!IsPostBack)
y funciona bien :)fuente
Este error se mostrará sin devolución de datos
Agregar código:
fuente
En este caso, agregue ID al botón en RowDataBound de la cuadrícula. Resolverá tu problema.
fuente
Una solución simple para este problema es utilizar la verificación IsPostBack en la carga de su página. Eso resolverá este problema.
fuente
Ajax UpdatePanel lo hace, y creo que es la forma más fácil , ignorando la sobrecarga de devolución de datos de Ajax .
fuente
Sé que esta es una publicación muy antigua. Asumiendo que está llamando a su aplicación, aquí hay una idea que me ha funcionado:
Si no necesita un control total, puede usar un panel de actualización que lo haría por usted.
fuente
Nos encontramos con este mismo problema cuando estábamos convirtiendo nuestras páginas ASPX normales en páginas de contenido.
La página con este problema tenía una
</form>
etiqueta dentro de una de las secciones de Contenido, por lo que se representaron dos etiquetas finales de formulario en tiempo de ejecución que causaron este problema. La eliminación de la etiqueta final del formulario adicional de la página resolvió este problema.fuente
<form>
campos adicionales en mi código.Si está usando gridview y no enlaza gridview al cargar la página dentro de ispostback, entonces este error ocurre cuando hace clic en editar y eliminar fila en gridview.
fuente
Hace cuatro minutos recibí el mismo error. Luego he investigado durante media hora como tú. En todos los foros generalmente dicen "agregar página enableEvent .. = falso o verdadero". Cualquier solución propuesta no resolvió mis problemas hasta que la encontré. Desafortunadamente, el problema es un botón ASP.NET. Lo eliminé hace dos segundos. Traté de reemplazar con "botón de imagen", pero también fue inaceptable (porque dio el mismo error).
Finalmente he reemplazado con
LinkButton
. ¡Parece estar funcionando!fuente
Estaba usando datalist y recibía el mismo error para mi botón. ¡Solo uso IsPostBack para verificar y llenar mis controles y el problema está resuelto! ¡¡¡Excelente!!!
fuente
Lo que funcionó para mí es mover el siguiente código de page_load a page_prerender:
fuente
La mejor opción para hacerlo es usar el campo oculto y no deshabilitar la validación de eventos, también cambiar cada cuadro de lista, lista desplegable para seleccionar con el atributo del servidor runat
fuente
Si está utilizando el panel de actualización de Ajax. Agregue la
<Triggers>
etiqueta y, dentro de ella, active el botón o el control que causa el uso de postBack<asp:PostBackTrigger .../>
fuente
Si conoce de antemano los datos que podrían rellenarse, puede usar ClientScriptManager para resolver este problema. Tuve este problema al llenar dinámicamente un cuadro desplegable usando JavaScript en una selección de usuario anterior.
Aquí hay un código de ejemplo para anular el método de representación (en VB y C #) y declarar un valor potencial para la lista desplegable ddCar.
En VB:
o una ligera variación en C # podría ser:
Para los novatos: esto debe ir en el código detrás del archivo (.vb o .cs) o si se usa en el archivo aspx puede envolverlo en
<script>
etiquetas.fuente
Esta fue la razón por la que lo estaba obteniendo:
Tenía un ASP: ListBox. Inicialmente estaba oculto. En el lado del cliente, lo llenaría a través de AJAX con opciones. El usuario eligió una opción. Luego, al hacer clic en el botón Enviar, el Servidor se volvería divertido con ListBox, ya que no recordaba que tuviera ninguna opción.
Entonces, lo que hice fue asegurarme de borrar todas las opciones de la lista antes de enviar el formulario nuevamente al servidor. De esa manera, el servidor no se quejó ya que la lista fue vacía para el cliente y volvió vacía.
Ordenados !!!
fuente