Cominciando a sviluppare pagine con Ajax mi sono spesso imbattuto in questo tipo di errore:
Bhé la soluzione era abbastanza chiara, ma il motivo e soprattutto le implicazioni che portava tale soluzione non mi erano chiare. Ed ecco che mi sono messo a studiare un po' più a fondo il problema:
Lo scenario è semplice:
- Creare una drop down server side
- Un altro elemento della webform effettua una chiamata asincrona e restituisce dei dati
- Questi dati vengono utilizzati per popolare la drop down
- La pressione di un pulsante che effettua un postback genera l'errore mostrato qui sopra.
Il problema risiede nel fatto che asp.net tenta di controllare i dati postati con la drop down confrontandoli con quelli che erano stati spediti durante la prima richiesta e si "accorge" che i dati postati non sono quelli che erano stati inviati.
Ci sono diversi metodi per risolvere il problema:
- Settare la proprietà EnableEventValidation a false (possibili problemi di sicurezza).
- Nel metodo Render della pagina è possibile definire quali siano i valori validi per i controlli in oggetto, il problema è che tali valori vengono aggiuntu alla viewstate e nel caso di un numero elevato di valori accettabili, i dati trasferiti al client potrebbero essere "troppi"
protected override void Render(HtmlTextWriter writer) {
ClientScript.RegisterForEventValidation(
this.ddlName.UniqueID, "Fred Smith");
ClientScript.RegisterForEventValidation(
this.ddlName.UniqueID, String.Empty);
base.Render(writer);
}
-
Invece di utilizzare un controllo server ASP.Net è possibile usare un controllo HtmlControl. Tali controlli non mantengono lo stato tra i diversi postback in Ajax.
Technorati Tags:
ASP.Net
,
ASP.Net Ajax