Raquel, parte de nuestro staff, nos hizo el favor de crear esta sección porque controla perfectamente dicho tema.
Solución:
¿Tienes códigos en tus eventos Page_Load? en caso afirmativo, quizás sea útil agregar lo siguiente.
if (!Page.IsPostBack)
//do something
Este error se produce cuando hace clic en su comando y Page_load se ejecuta nuevamente, en un ciclo de vida normal será Page_Load -> Haga clic en Comando -> Page_Load (nuevamente) -> Procesar evento ItemCommand
El problema es que ASP.NET no se entera de 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 tiene un costo muy bajo).
- 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, el estado de vista y los campos relacionados obtienen actualizaciones y se aprobará la validación de eventos).
- 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.
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, recibí este mensaje de error:
“Argumento de devolución de llamada o devolución de llamada no válido. La validación de eventos está habilitada usando en configuración o
<%@ Page EnableEventValidation="true" %> en una pagina Por motivos de seguridad, esta función verifica que los argumentos de los eventos de devolución de datos o de devolución de llamada se originen en el control del servidor que los representó originalmente. Si los datos son válidos y esperados, use el método ClientScriptManager.RegisterForEventValidation para registrar la devolución de datos o la devolución de llamada para la validación”.
Cambié varios códigos, y finalmente lo logré. Ruta de mi experiencia:
1) Cambié de página attribute a EnableEventValidation="false"
. Pero no funcionó. (Esto 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 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.
Aquí tienes las comentarios y puntuaciones
Te invitamos a añadir valor a nuestra información aportando tu experiencia en las críticas.