UserControl, UpdatePanel UrlRewrite, una combinazione vincente!

È un po' di tempo che non faccio post sul blog, ma oggi con Stefano e GVNN, stavamo cercando di risolvere un problema in una situazione tipo la seguente:

UserControl normalissimo con all'interno un semplice UdatePanel che al click esegue delle semplici operazioni di select ed insert sul database.
E fin qui nulla di particolare se non fosse per il fatto che al primo colpo veniva eseguito il codice perfettamente, mentre al secondo giro la chiamata asincrona non andava più e veniva mostrato un messaggio di errore tipo il seguente:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machinekey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Ovviamente sia EnableViewStateMac che ViewStateEncryptionMode sono impostati su false ed eravamo in locale quindi niente cluster.

Andando a guardare con fiddler le chiamate ci siamo accorti che al primo giro veniva effettuata una chiamata ad un url, mentre al secondo l'url era differente, o meglio non era più il RawUrl ad essere chiamato ma l'url non riscritto da un HttpModule interno.

Indagando un po' più a fondo ci siamo accorti che all'interno dell'evento pageLoading della classe Sys.WebForms.PageRequestManager veniva riscritto l'url da chiamare.

Il problema è risolvibile aggiungedo questo 4 righe di JavaScript:

Sys.Application.add_load(function()
{
var form = Sys.WebForms.PageRequestManager.getInstance()._form;
form._initialAction = form.action = window.location.href;
});

 

Devo dire che ormai non mi stupisco più quando trovo stranezze sul Framework Ajax 1.0 che ritengo più una versione 0.8, e aggiungo questo comportamento all'elenco delle cose che spero Fixate nella prossima Release (Encoding non UTF-8, WebPart, ecc) del Framework ASP.NET AJAX.

Ciauz

 


Comments