Asp.NET e WebParts: errore di mancata deserializzazione dei personalization blobs



Post abbastanza 'specifico', magari puo' far comodo a qualcouno che si e' trovato nella mia stessa situazione. :-)

Lavorando con Asp.Net e le WebParts mi sono trovato davanti a un errore criptico e all'apparenza difficile da riprodurre: aggiungendo alla pagina una WebPart realizzata con uno UserControl, nel caso il controllo utilizzasse delle proprieta' di tipo 'Enum' dichiarate direttamente nel codebehind saltuariamente la pagina non viene piu' visualizzata, restituendo questo errore
Value cannot be null.
Parameter name: enumType
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: enumType

Dopo lunghi smazzamenti ho trovato la soluzione: a quanto pare, nel blob serializzato sul database contenente le configurazioni le informazioni sono legate all' Assembly Name della pagina/controllo, anche i tipi di dati dichiarati direttamente nel sorgente del controllo.

Alla successiva ricompilazione l'Assembly Name cambia e il riferimento nel blob di configurazione non viene piu' visto come valido, generando l'eccezione.

Per ovviare a questo problema e' sufficiente dichiarare tutti i property types all'interno di una classe distinta, non nel codebehind della pagina o del controllo.

Published: November 15 2007

  • category: