válido true pages page llamadas invalid false enableeventvalidation devolución argumento argument .net asp.net .net-2.0 postback argumentexception

.net - llamadas - Argumento de devolución de llamada o devolución de llamada no válido. La validación de eventos se habilita usando ''<pages enableEventValidation="true"/>''



argumento de postback o de devolución de llamadas no válido (30)

3: Cambié mi tipo de botón en la columna de la cuadrícula de "PushButton" a "LinkButton". ¡Funcionó! ("ButtonType =" LinkButton ") Creo que si puede cambiar su botón a otros controles como" LinkButton "en otros casos, funcionaría correctamente.

Desearía poder votar, Amir (lamentablemente mi reputación es demasiado baja). Simplemente estaba teniendo este problema y cambiar esto funcionó como un campeón en mi vista de cuadrícula. Aparte de eso, 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 hacen que .net sea incómodo.

Recibo el siguiente error cuando publico una página del lado del cliente. Tengo un código JavaScript que modifica un asp: ListBox en el lado del cliente.

¿Cómo arreglamos esto?

Detalles de 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


¿Tienes códigos en tus eventos Page_Load? Si es así, entonces tal vez agregando lo siguiente ayudará.

if (!Page.IsPostBack) { //do something }

Este error se produce al hacer clic en su comando y la carga de página se está ejecutando nuevamente, en un ciclo de vida normal será Page_Load -> Haga clic en Comando -> Página_Cargar (de nuevo) -> Evento de comando de elemento de proceso


(1) EnableEventValidation = "false" ................... No funciona para mí.

(2) ClientScript.RegisterForEventValidation .... No funciona para mí.

Solución 1:

Cambie el botón / ImageButton a LinkButton en GridView. Funciona. (Pero me gusta ImageButton)

Investigación: Button / ImageButton y LinkButton utilizan diferentes métodos para la devolución de datos

Artículo original:

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

Solución 2:

En OnInit (), ingrese el código de esta manera para establecer una ID única para Button / ImageButton:

protected override void OnInit(EventArgs e) { foreach (GridViewRow grdRw in gvEvent.Rows) { Button deleteButton = (Button)grdRw.Cells[2].Controls[1]; deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString(); } }

Artículo original:

http://www.c-sharpcorner.com/Forums/Thread/35301/


Ajax UpdatePanel lo hace, y creo que es la forma más fácil , ignorando la sobrecarga de devolución de datos de Ajax .


Como dijo Nick B y eso me funcionó, en algunos casos hay que eliminar los saltos de línea. Echa un vistazo al código:

-Camino equivocado:

<asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem Selected="True"> Item 1</asp:ListItem> <asp:ListItem> Item 2</asp:ListItem> <asp:ListItem> Item 3</asp:ListItem> </asp:DropDownList>

-Manera correcta:

<asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem Selected="True">Item 1</asp:ListItem> <asp:ListItem>Item 2</asp:ListItem> <asp:ListItem>Item 3</asp:ListItem> </asp:DropDownList>

Solo me ocurrió en IE10 +


El problema es que ASP.NET no conoce este elemento de lista extra o eliminado. Tienes una serie de opciones (enumeradas a continuación):

  • Deshabilite la validación de eventos (mala idea, porque pierde un poco de seguridad que conlleva muy poco costo).
  • Utilice ASP.NET Ajax UpdatePanel. (Coloque el cuadro de lista en el Panel de actualización y active una actualización, si agrega o elimina el cuadro de lista. De esta manera, las actualizaciones de los campos de estado de vista y campos relacionados y la validación de eventos pasarán).
  • Olvídese del lado del cliente y use la devolución de datos clásica y agregue o elimine el lado del servidor de listas.

Espero que esto ayude.


En este caso, agregue id al botón en RowDataBound de la cuadrícula. Solucionará tu problema.


Esta fue la razón por la que lo estaba consiguiendo:

Tuve un ASP: ListBox. Inicialmente estaba oculto. En el lado del cliente lo rellenarí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 gracioso con el ListBox, ya que no recordaba que tuviera ninguna opción.

Entonces, lo que hice fue asegurarme de que borro todas las opciones de la lista antes de enviar el formulario al servidor. De esa manera, el servidor no se quejó ya que la lista se envió al cliente vacía y se volvió vacía.

Ordenado !!!


Estaba usando datalist y estaba recibiendo el mismo error para mi botón pulsador. ¡Solo uso IsPostBack para verificar y completar mis controles y el problema está resuelto! ¡¡¡Genial!!!


Este error se mostrará sin devolución.

Añadir código:

If(!IsPostBack){ //do something }


Hace cuatro minutos recibí el mismo error. Entonces he investigado durante media hora como tú. En todos los foros, generalmente dicen "agregar página enableEvent .. = false o true". Cualquier solución propuesta no resolvió mis problemas hasta que la encontré. El problema es, lamentablemente, un botón ASP.NET. Lo quité hace dos segundos. Intenté reemplazarlo con "imagebutton", pero también era inaceptable (porque daba el mismo error).

Finalmente he sustituido con LinkButton . ¡Parece estar funcionando!


He tenido el mismo problema, lo que hice:

Acaba de agregar una condición if(!IsPostBack) y funciona bien :)


Implementé una vista de cuadrícula anidada y enfrenté el mismo problema. He usado LinkButton en lugar de un botón de imagen como este:

antes de tener una columna como esta:

<asp:TemplateField ItemStyle-Width="9"> <ItemTemplate> <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand" runat="server" /> </ItemTemplate> </asp:TemplateField>

He reemplazado de esta manera.

<asp:TemplateField> <ItemTemplate> <asp:LinkButton CommandName="Expand" ID="lnkBtn" runat="server" ><asp:Image ID="Img" runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton> </ItemTemplate> </asp:TemplateField>


Intenta algo así, en su página .aspx.

añadir

EnableEventValidation = "false"

¡Siéntete libre de hacer cualquier pregunta!


La mejor opción 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 de servidor de ejecución


Lo que funcionó para mí es mover el siguiente código de page_load a page_prerender:

lstMain.DataBind(); Image img = (Image)lstMain.Items[0].FindControl("imgMain"); // Define the name and type of the client scripts on the page. String csname1 = "PopupScript"; Type cstype = this.GetType(); // Get a ClientScriptManager reference from the Page class. ClientScriptManager cs = Page.ClientScript; // Check to see if the startup script is already registered. if (!cs.IsStartupScriptRegistered(cstype, csname1)) { cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=/"" + img.ClientID + "/"</script>"); }


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 causaba el problema.

<body> <form id="form1" runat="server"> <div> <form action="#" method="post" class="form" role="form"> <div> ... <asp:Button ID="submitButton" runat="server" </div> </div> </body>

Tenga en cuenta que recientemente ASP.NET ha comenzado a considerar iframes dentro de una etiqueta de formulario que contiene una etiqueta de formulario en el documento de iframe como un marco anidado. Tuve que mover el iframe fuera de la etiqueta de formulario para evitar este error.


Nos encontramos con este mismo problema cuando estábamos convirtiendo nuestras páginas ASPX regulares a páginas de Contenido.

La página con este problema tenía una etiqueta </form> dentro de una de las secciones de Contenido, por lo tanto, dos etiquetas finales de formulario se representaron en el tiempo de ejecución, lo que causó este problema. La eliminación de la etiqueta final de formulario adicional de la página resolvió este problema.


Otra forma no mencionada aquí es la subclase ListBox

Es decir.

public class ListBoxNoEventValidation : ListBox { }

ClientEventValidation desactiva el atributo System.Web.UI.SupportsEventValidation si lo subclasifica, a menos que lo agregue de nuevo explícitamente, nunca llamará a la rutina de validación. Eso funciona con cualquier control, y es la única forma que encontré para "deshabilitarlo" en una base de control por control (es decir, no a nivel de página).


Realmente querrá hacer 2 o 3, no deshabilite la validación de eventos.

Hay dos problemas principales al agregar elementos a un lado del cliente asp: listbox.

  • La primera es que interfiere con la validación de eventos. Lo que regresó al servidor no es lo que envió.

  • La segunda 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 realizados en el cliente. El motivo 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 los cambios que haya realizado.

La mejor opción es más probable que use un panel de actualización como se ha recomendado. Otra opción, si realmente necesita hacer este lado del cliente, es usar un antiguo <select> lugar de un <asp:ListBox> , y mantener su lista de elementos en un campo oculto. Cuando la página se presenta en el cliente, puede rellenarla a partir de una parte del contenido de su campo de texto.

Luego, cuando esté listo para publicarlo, volverá a llenar el contenido del campo oculto desde su <select> modificada. Luego, por supuesto, debe dividir eso nuevamente en el servidor y hacer algo con sus elementos, ya que su selección está vacía ahora que está nuevamente en el servidor.

En general, es una solución bastante complicada que realmente no recomendaría, pero si realmente tiene que hacer modificaciones en el lado del cliente de un listBox, funciona. Sin embargo, realmente recomendaría que mires un updatePanel antes de tomar esta ruta.


Sé que este es un post super viejo. Suponiendo que está llamando a su aplicación, aquí hay una idea que me ha funcionado:

  1. Implementa el ICallbackEventHandler en tu página
  2. Llame a ClientScriptManager.GetCallbackEventReference para llamar al código del lado de su servidor
  3. Como indica el mensaje de error, puede llamar a ClientScriptManager.RegisterForEventValidation

Si no necesita el control total, podría usar un panel de actualización que haría esto por usted.


Si completa la lista desplegable a través del script del lado del cliente, borre la lista antes de enviar el formulario al servidor; entonces ASP.NET no se quejará y la seguridad seguirá activa.

Y para obtener los datos seleccionados de la DDL, puede adjuntar un evento "OnChange" a la DDL para recopilar el valor en una entrada oculta o en un cuadro de texto con Style = "display: none;"


Si conoce por adelantado los datos que podrían llenarse, puede usar el ClientScriptManager para resolver este problema. Tuve este problema al rellenar dinámicamente un cuadro desplegable con javascript en una selección de usuario anterior.

Aquí hay un código de ejemplo para anular el método de renderización (en VB y C #) y declarar un valor potencial para la lista desplegable ddCar.

En VB:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Dim ClientScript As ClientScriptManager = Page.ClientScript ClientScript.RegisterForEventValidation("ddCar", "Mercedes") MyBase.Render(writer) End Sub

o una ligera variación en C # podría ser:

protected override void Render(HtmlTextWriter writer) { Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes"); base.Render(writer); }

Para los novatos: debe ir en el código detrás del archivo (.vb o .cs) o, si se usa en el archivo aspx, puede incluir etiquetas <script> .


Si está utilizando el panel de actualización de Ajax. Agregue la etiqueta <Triggers> y dentro de ella active el botón o control que causa el postBack usando <asp:PostBackTrigger .../>


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 representó 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, invalide Page.Render y llame a Page.ClientScript.RegisterForEventValidation para cada valor que su JavaScript pueda agregar al cuadro de lista:

protected override void Render(HtmlTextWriter writer) { foreach (string val in allPossibleListBoxValues) { Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val); } base.Render(writer); }

Esto puede ser una molestia si tiene un gran número de valores potencialmente válidos para el cuadro de lista. En mi caso, movía elementos entre dos ListBoxes, uno que tiene todos los valores posibles y otro que inicialmente está vacío pero se llena con un subconjunto de los valores del primero en JavaScript cuando el usuario hace clic en un botón. En este caso, solo necesita iterar a través de los elementos en el primer ListBox y registrar cada uno con el segundo cuadro de lista:

protected override void Render(HtmlTextWriter writer) { foreach (ListItem i in listBoxAll.Items) { Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value); } base.Render(writer); }


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 activada la función Activar Evento. No era bueno Estaba obteniendo excepciones relacionadas con devolución de datos no válidas.

Lo que funcionó para mí fue establecer 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 de los dos.


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:

DropDownList DD = (DropDownList)F.FindControl("DDlista"); HiddenField HF = (HiddenField)F.FindControl("HFlista"); string[] opcoes = HF.value.Split(''/n''); foreach (string opcao in opcoes) DD.Items.Add(opcao);

Mi "HF" (campo oculto) tenía las opciones separadas por la nueva línea, como esta:

HF.value = "option 1/n/roption 2/n/roption 3";

El problema fue que la página HTML estaba rota (me refiero a nuevas líneas) en las opciones de "selección" que representaban el DropDown.

Así que resolví mi problema agregando una línea:

DropDownList DD = (DropDownList)F.FindControl("DDlista"); HiddenField HF = (HiddenField)F.FindControl("HFlista"); string dados = HF.Value.Replace("/r", ""); string[] opcoes = dados.Split(''/n''); foreach (string opcao in opcoes) DD.Items.Add(opcao);

Espero que esto ayude a alguien.


Tuve una experiencia con DataGrid. Una de sus columnas era el botón "Seleccionar". Cuando estaba haciendo clic en el botón "Seleccionar" de cualquier fila, había recibido este mensaje de error:

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

Cambié varios códigos, y finalmente lo logré. Mi ruta de experiencia:

1) Cambié el atributo de la 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ó.

protected override void Render(HtmlTextWriter writer) { foreach (DataGridItem item in this.Grid.Items) { Page.ClientScript.RegisterForEventValidation(item.UniqueID); foreach (TableCell cell in (item as TableRow).Cells) { Page.ClientScript.RegisterForEventValidation(cell.UniqueID); foreach (System.Web.UI.Control control in cell.Controls) { if (control is Button) Page.ClientScript.RegisterForEventValidation(control.UniqueID); } } } }

3) Cambié mi tipo de botón en la columna de la cuadrícula de PushButton a LinkButton . ¡Funcionó! ("ButtonType =" LinkButton "). Creo que si puede cambiar su botón a otros controles como" LinkButton "en otros casos, funcionaría correctamente.


Una solución simple para este problema es utilizar la comprobación de IsPostBack en la carga de su página. Eso resolverá este problema.


si cambia UseSubmitBehavior="True" por UseSubmitBehavior="False" su problema se resolverá

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument=''<%#Eval("Id")%>'' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />