2009-10-01 12 views
21

Ho usato il seguente nel file web.configscopo per <pages enableEventValidation = "false">

<pages enableEventValidation="false"> 

Questo risolve un problema che abbiamo avuto con l'Ajax.

Abbiamo una pagina Web che funziona correttamente se si utilizza direttamente un collegamento ipertestuale HTML standard.

Se si passa alla pagina da un'altra pagina tramite collegamento all'interno di una griglia e di response.redirecting nell'evento RowCommand alla pagina che passa un ID nella querystring. La pagina genera errori dai controlli all'interno del pannello che indicano

"Argomento postback o callback non valido. La convalida degli eventi è abilitata utilizzando in configurazione o <% @ Page EnableEventValidation =" true "%> in una pagina. Per motivi di sicurezza, questa funzione verifica che gli argomenti di postback o eventi di callback siano originati dal controllo server che li ha originariamente resi. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida. "

I Sono felice di lasciare la convalida della pagina come falsa, in quanto sembra non avere avuto altri effetti.

Qualche idea cosa sta succedendo?

+0

Ho trovato [questa risposta] (http://stackoverflow.com/a/9104931/1178314) su una domanda dupe per essere abbastanza buono e mancante qui. –

risposta

12

Leggi il documentation.

MODIFICA: Per motivi di sicurezza, è probabilmente meglio lasciarlo impostato su true ovunque sia possibile.

Si consiglia pertanto di impostarlo su false solo sulle singole pagine AJAX in cui esso causa problemi, mentre rimane vero in web.config.

+1

Naturalmente l'ho letto, ma ho trovato che la spiegazione limitata mi porta a credere che non avrei problemi a impostare questo a falso, a meno che qualcuno non abbia intenzionalmente cercato di essere malizioso, non suggerisce che il resto delle pagine si comporti diversamente . Da quello presumo che sia sicuro per me lasciarlo come falso. L'app entra nella intranet e non temo attacchi malevoli. – Robert

+0

Dopo un po 'di ricerche vado con l'EDIT suggerito. Ha senso per l'app e ora sta cantando di nuovo dolcemente, tutto fatto finita. – Robert

+0

Quindi puoi rimuovere il tuo downvote? – SLaks

6

Da here

valido postback o errore argomento callback è fondamentalmente sollevare a causa della funzionalità di Convalida evento. La funzionalità EventValidation è una nuova funzionalità in ASP.NET 2.0 e fornisce un ulteriore livello di controlli per verificare che un postback da un controllo sul client provenga realmente da quel controllo e non da qualcuno malintenzionato che utilizza qualcosa come un'iniezione di script tra siti per provare e manipolare le cose. Fa parte della nostra strategia generale di aggiungere sempre più livelli di sicurezza in profondità al modello di programmazione, in modo che gli sviluppatori possano essere sicuri di default anche se dimenticano di aggiungere controlli di sicurezza propri.

Ora, valido postback o argomento CallBack errore può verificarsi quando si sparano evento click e l'oggetto è rilegatura o le sue proprietà vengono modificati in Page_Load o qualcuno sta cercando di incidere nel vostro sistema con cross site scripting. Ogni volta che .Net Framework esegue il rendering di una pagina e associa una Guida unica per tutti i controlli. Quando si associa un gridview o un ripetitore, su ciascun framework del database verrà associato un nuovo guid per il contorl. Pertanto, ogni volta che si attiva un evento, assicurati che l'evento Page_Load non cambi il controllo, perché se il controllo è cambiato, avrà un Guid diverso che ha attivato l'evento per il postback. Ecco alcuni scenari con questo errore.

1) Argomento postback o callback non valido in GridView Il problema può essere: Si stanno vincolando dati nell'evento Page_Load con Origine dati oggetto o Rilegatura manuale con chiamata di funzione. Questo renderà il tuo GridView vincolare i dati su ogni evento di qualsiasi controllo.Quando si attiva un comando GridView con OnRowCommand, prima che RowCommand si avvii, GridView eseguirà nuovamente il bind e tutti i controlli al suo interno verranno assegnati al nuovo id. Quindi RowCommand non ha potuto ottenere l'elemento che ha attivato l'evento. Soluzione per non valido postback o argomento richiamata in GridView: È possibile associare i dati in questo caso condizioni

if (!IsPostBack) 

    { 

      //Your code for Bind data 

    } 

Questo codice sarà sicuramente darà soluzione se questo non funziona allora verificare se qualsiasi altro controllo non sta dando errore.

+0

Grazie per l'input ho avuto una lettura su questo, ma il rapporto sforzo/risultati non era buono;) Grazie – Robert

3

C'è una cosa la pena di aggiungere qui: Se si desidera disabilitare la convalida evento per un controllo specifico, piuttosto che l'intera pagina, c'è una soluzione documentata here e here (e ora fa riferimento nel relevant Connect suggestion):

Sottoclasse semplicemente la classe WebControl pertinente e non impostare l'attributo SupportsEventValidation nella sottoclasse. La sottoclasse sarà esente dalla convalida dell'evento.

+0

Upvote per i collegamenti per chiarire la spiegazione :) –

Problemi correlati