Postback inválido o argumento de devolución de llamada. La validación de eventos se habilita usando '<pages enableEventValidation = “true” />'

238

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
Julio A
fuente
No realice un enlace de datos en el evento page_load.
Paul Zahra el

Respuestas:

171

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

  • Deshabilite la validación de eventos (mala idea, porque pierde un poco de seguridad que viene con 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 forma, viewstate y los campos relacionados obtienen actualizaciones y se validará el evento).
  • Olvídese del lado del cliente y use la devolución de datos clásica y agregue o elimine los elementos de lista del lado del servidor.

Espero que esto ayude.

Norbert B.
fuente
Una opción más: implementar IPostBackEventHandler y llamar a js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
gdbdable
De acuerdo con las sugerencias anteriores, puse mis menús desplegables en un ASP.NET regular: UpdatePanel, cargué los menús desplegables en el código y luego upNewRecord.Update ();
Ricardo Appleton el
183

¿Tiene códigos en sus eventos Page_Load? en caso afirmativo, tal vez agregando lo siguiente ayudará.

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

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

Jeff Pang
fuente
77
aha! Muchas gracias, ese fue el truco en mi caso! Recargué una lista desplegable en la carga de la página, por lo que el marco perdió el control de los elementos (los nuevos) en el ddl, y el que hice clic (que ya no existía)
Michel
Tuve el mismo error que el OP ... Estaba usando un asistente en mi formulario y estaba llamando al paso 0 en la carga de mi página. eliminado eso y el problema desapareció. Gracias ...
tking
Muchas gracias por esta respuesta ... Tuve el mismo problema y resultó que me había olvidado de ignorar las devoluciones al cargar datos en mi cuadrícula ... ahórreme mucho tiempo
Quagmire
10
Duh! Volver a los formularios web de MVC es un fastidio. Esta es la respuesta correcta
Vishnoo Rath
2
Hice esto, pero no funcionó para mí porque hay un código que tengo que ejecutar en el evento page_load para cuando no es una devolución de datos, por lo que todavía recibí el mismo error. Deshabilitar el estado de vista para mi repetidor resolvió el problema en su lugar.
Bryan
40

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:

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

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.RegisterForEventValidationen 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 cuadrícula de PushButtona LinkButton. ¡Funcionó! ("ButtonType =" LinkButton "). Creo que si puede cambiar su botón a otros controles como" LinkButton "en otros casos, funcionaría correctamente.

Amir Chatrbahr
fuente
1
Mi solución fue renunciar a los botones de anidación dentro de la cuadrícula de datos. MS me falla una vez más.
Jacobs Data Solutions el
Tu solución también funcionó para mí. Gracias. Pero quiero saber por qué Buttonno funciona cuando linkButtonse trabaja en el mismo programa. Si es así, ¿deberíamos usar siempre linkButton? ¿Cómo podríamos hacer más flexible?
Frank Myat jue
8
Intente agregar a su botón UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk
Awesomeeeeeee :) .. Puedes aprender esto solo por experiencia ... Probaste un verdadero espectáculo. La experiencia es la mejor maestra ... ¡Gran respuesta y explicación!
saun4frsh
En la anulación de Render DEBE PONER la base. Render (escritor); al final ... de lo contrario no funcionará!
Paul Zahra el
28

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.

Andy C.
fuente
3
c, no es necesario que mantenga los elementos seleccionados en un campo oculto; si selecciona el cuadro de selección runat = "server", puede leer el valor devuelto publicado desde Request.Form [ selectid .UnqiueID]. Y si se seleccionan múltiples, el navegador publica los valores como un csv. Tenga en cuenta que los elementos y las propiedades de índice seleccionadas del control serán incorrectos en el servidor ya que ha modificado la lista de itrm en el cliente que el servidor no conoce.
Michael
Michael, eso funcionó. siempre que agregue "multiple = true", de lo contrario solo le dará 1 valor. Gracias
Sameer Alibhai
1
Tuve el mismo problema para una lista desplegable con caracteres de nueva línea. Cambiar a una selección funcionó perfectamente. ¡Gracias!
Thchaver
Solía ​​simplemente viejo <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?
Pranesh Janarthanan
17

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.

Umar Farooq Khawaja
fuente
3
Tuve este problema exacto con un control web heredado. Nuestra plataforma web / CMS (sitecore) recibió una gran actualización que activó la validación de eventos (¡anteriormente había estado desactivada! ¡Ay!). El control del repetidor mostraba imágenes en una galería web (con botones para reorganizarlas) y en la devolución de estos botones se produciría la excepción. Inhabilité el estado de la vista en los repetidores usando EnableViewState = "false" como sugirió y oye que funcionó. Como otros han encontrado, Overriding Render () y usando ClientScriptManager.RegisterForEventValidation () no funcionó para mí. ¡GRACIAS!
xan
Al igual que @xan, también uso Sitecore y esto es exactamente lo que necesitaba.
wilsjd
Esto funcionó para mí también. El panel de actualización de AJAX también habría funcionado, pero estaba hinchado por encima de lo que no necesitaba en el caso, así que gracias Umar Farooq Khawaja.
Bryan
17

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.

<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 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.

biggles
fuente
12

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:

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 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:

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

Otra forma no mencionada aquí es la subclase ListBox

Es decir.

public class ListBoxNoEventValidation : ListBox 
{
}

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).

Mike C.
fuente
2
Muy bien descrito aquí .
Pavel Hodek
1
Creo que la mejor manera de abordarlo es haciendo esto. Deberíamos arreglarlo en el nivel de control en lugar de en el nivel de página y arriesgar la seguridad de todos los controles involucrados +1 y gracias por @PavelHodek por ese enlace.
James Poulose
Desafortunadamente, parece que si hace esto, los elementos de la lista agregados en el cliente no serán reconocidos si son elementos seleccionados cuando la página se vuelve a publicar.
Jonathan Wood
9

intentas algo así, en tu página .aspx

añadir

EnableEventValidation = "false"

¡siéntase libre de hacer cualquier pregunta!

usuario3690871
fuente
Argumentaría si deshabilitar la oferta de validación integrada en el marco para dejar de ver el error sería la solución más adecuada en este caso.
Jviaches
8

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;"

MyEname
fuente
+1 Fácil de implementar. Puede que no sea el más limpio, pero lo suficientemente fácil.
Nutsch
7

3: Cambié mi tipo de botón en la columna de 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 (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.

Brian Welch
fuente
El quid de este problema es el modelo de validación de eventos asp.net y si la "página" es modificada por el cliente en el momento en que realiza una publicación. ¿Qué quieres decir con "..... Y estos controles cambiantes hacen que .net sea incómodo"?
Julius A
7

(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:

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/

Yilee
fuente
6

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:

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

He reemplazado así.

<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> 
Swathi
fuente
5

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, así:

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

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:

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.

pamelo
fuente
4

si cambias UseSubmitBehavior="True" a UseSubmitBehavior="False"tu problema se resolverá

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
Ali Joodie
fuente
Eso no funcionó para mí. Sin embargo, estoy usando un botón de imagen y en una tabla en un repetidor, por lo que no es exactamente la misma situación. La desactivación del estado de visión del repetidor funcionó para mí.
Bryan
3

He tenido el mismo problema, lo que hice:

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

Niket
fuente
3

Este error se mostrará sin devolución de datos

Agregar código:

If(!IsPostBack){

 //do something

}
Balaji Selvarajan
fuente
2

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

nilesh
fuente
2

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

usuario249527
fuente
2

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

netseng
fuente
2

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:

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

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

tmck2
fuente
2

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.

Tushar
fuente
Gracias, resulta que también tenía <form>campos adicionales en mi código.
Eric Kigathi
2

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.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }
Akhil Singh
fuente
1

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!

cem
fuente
1

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!!!

Razia
fuente
1

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>");
}
Murad Dodhiya
fuente
1

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

Programista
fuente
Cambiar de control asp a regular <select id = "director" runat = "server"> funcionó muy bien. Pude acceder a su valor en el código detrás usando: ej .: string directorId = Request.Form [director.ID]
Baxter
1

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 .../>

devo882
fuente
1

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:

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: 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.

CraigS
fuente
1

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 !!!

usuario2520440
fuente