Domanda

Uno dei siti che gestisco fa molto affidamento sull'uso di ViewState (non è il mio codice).Tuttavia, in alcune pagine in cui il ViewState è estremamente gonfio, Safari lancia a "Validation of viewstate MAC failed" errore.

Sembra che ciò accada solo in Safari.Firefox, IE e Opera si caricano tutti correttamente nello stesso scenario.

È stato utile?

Soluzione 3

Ho fatto una piccola ricerca al riguardo e anche se non sono del tutto sicuro che sia la causa, credo che sia perché Safari non restituisce l'intero set di risultati (quindi ritagliandolo).

Ho discusso con un altro sviluppatore e ho trovato anche il seguente post su Canale 9 che consiglia di utilizzare il servizio SQL State per archiviare il viewstate evitando il problema del postback e anche le dimensioni della pagina.

http://channel9.msdn.com/forums/TechOff/250549-ASPNET-ViewState-flawed-architecture/?CommentID=270477#263702

Ti sembra la soluzione migliore?

Altri suggerimenti

Anche se sono d'accordo con la soluzione Channel 9, tieni presente che in alcuni ambienti ospitati Safari non è considerato un browser di livello superiore.Potrebbe essere necessario aggiungerlo al browser della tua applicazione per utilizzare alcune funzionalità ASP.Net.

Questa è stata la causa principale di alcuni problemi che abbiamo avuto per il sito di un cliente che utilizzava il controllo Menu ASP.

Il mio primo punto di riferimento sarebbe quello di esaminare gli elementi della pagina e vedere quali controlli:

  1. Funzionerà ancora quando disattivo ViewState
  2. Può essere spostato fuori dalla pagina e in una chiamata AJAX per essere caricato quando richiesto

In caso contrario, ed ecco il disclaimer: non ho mai utilizzato questa soluzione su un sito rivolto al Web, ma in passato, quando volevo eliminare enormi ViewState in applicazioni a pubblico limitato, ho archiviato ViewState nella Session.

Nel mio caso ha funzionato perché l'impatto sulla memoria non è significativo per il numero di utenti, ma se gestisci un sito abbastanza popolare non consiglierei questo approccio.Tuttavia, se la soluzione Session funziona per Safari, potresti sempre rilevare l'agente utente e modificarlo in modo appropriato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top