2011-04-23 46 views
7

chicos, tengo un control de usuario en mi aplicación asp.net 3.5 y estoy pasando algo de texto sin formato en el evento de clic de botón. El botón está situado en el control de usuario. pero cuando disparo el evento, obtengo el siguiente error;se el método ClientScriptManager.RegisterForEventValidation para registrar la devolución de datos o los datos de devolución de llamada para la validación

Invalid postback or callback argument. Event validation is enabled using 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.

cuando configuro EnableEventValidation = "false" en la página de formulario web como golpe. dispara el evento;

<%@ Page EnableEventValidation="false" %> 

pero estoy pensando que no debería ser una buena idea establecer ese falso. Entonces, ¿cuál es la alternativa aquí? error al decir que 'utilizar el método ClientScriptManager.RegisterForEventValidation para registrar la devolución de datos o los datos de devolución de llamada para la validación. 'pero ¿dónde voy a registrar esa cosa? Gracias !

Además, estoy usando algunos controles AjaxControlToolkit dentro de mi usercontrol y algunas cosas jquery.

Respuesta

0

Puede dejarlo habilitado y luego registrar su control para la validación de eventos. Añadir la siguiente llamada en el PreRender o Render página de ciclo de vida, entonces su control debe trabajar sin tener que apagar eventValidation:

Page.ClientScript.RegisterForEventValidation(this.UniqueID); 
+0

sin uso. no funcionó en absoluto. – tugberk

+0

proporciona este error: RegisterForEventValidation solo se puede llamar durante Render(); – SwissCoder

+0

logré resolver el problema utilizando Page.ClientScript.RegisterForEventValidation (this.UniqueID); en el Render y también poniendo todos los enlaces gv de la carga de la página! IspostBack http://stackoverflow.com/questions/2968525/templatefield-button-causing-gridview-invalid-postback/12081309#12081309 – JJschk

2

tratar

if (!Page.IsPostBack) 

antes de cargar y enlazar los datos en cuadrícula de datos

+0

Sin explicación de por qué esto trabajo – Woot4Moo

+0

Esto es correcto si el código está tratando de cambiar el origen de datos en la cuadrícula. – Flea

+0

Es realmente cierto. Estaba usando un panel de actualización y estaba vinculando datos a la fuente de datos en cada devolución de datos en la carga de la página. –

1

En mi situación, estaba intentando actualizar un origen de datos de GridViews en page_load y olvidé comprobar si la solicitud era una devolución de datos, por lo tanto, mi fuente intentaba cambiar y arrojó este error. Una vez que hice el cheque para la publicación, funcionó bien. Espero que esto ayude a alguien en el futuro.

if (Page.IsPostBack == false) 
    { 
     this.sqlObj = new SqlServer(ConfigurationManager.ConnectionStrings["PdfReceiverConnectionString"].ToString()); 
     this.populateDataGrid(); 
    } 
3

El problema con la validación de eventos ASP.NET 2.0 es que es todo o nada y un poco pesado. Leí un article que explica lo que debe hacer aquí.

Básicamente debe registrar los controles secundarios del control de usuario con el motor de validación de eventos.

C# 
protected override void Render(HtmlTextWriter writer) 
{ 
    // Register controls for event validation 
    foreach (Control c in this.Controls) 
    { 
     this.Page.ClientScript.RegisterForEventValidation(
       c.UniqueID.ToString() 
     ); 
    } 
    base.Render(writer); 
} 

VB 
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 

    For Each aControl As Control In Me.Controls 
     Me.Page.ClientScript.RegisterForEventValidation(aControl.UniqueID.ToString) 
    Next aControl 

    MyBase.Render(writer) 
End Sub 

Ahora esto puede no resolver su problema porque no estoy seguro de cómo está devolviendo la cadena. Otro article explica que la validación de eventos es una combinación del ID único del control y todos los valores que puede devolver. Si está utilizando el valor command de un botón para pasar el texto, puede tener problemas con esta tarea.

Si el evento que está causando el problema es el clic, entonces registrar los controles del control de usuario debería ser el truco.

Cuestiones relacionadas