Utilizzare il ControlState di ASP.NET 2.0

di Daniele Bochicchio, in ASP.NET 2.0, Custom Control,

ASP.NET 2.0 ha una novità riservata esclusivamente a chi produce custom control, che è rappresentata da un nuovo meccanismo di persistenza dello stato specifico per i controlli, chiamato ControlState.

Questa nuova funzionalità cerca di evitare uno dei problemi più diffusi con ASP.NET 1.1, laddove alcuni controlli smettono di funzionare se il ViewState viene disabilitato per risparmiare la banda occupata dal campo hidden in cui viene salvato.

Il ControlState rappresenta dunque un repository specifico per i controlli, che rende possibile il funzionamento di questi ultimi anche in assenza del ViewState, consentendo di memorizzare solo le informazioni strettamente necessarie al funzionamento dei controlli durante i vari PostBack, rendendo possibile il mantenimento di un set minimo di funzionalità.

Il ViewState dunque deve essere utilizzato come il contenitore delle funzionalità di contorno, quali le proprietà dell'interfaccia grafica, mentre il nuovo ControlState rappresenta il contenitore dello stato comportamentale, consentendo di salvare le informazioni essenziali al funzionamento del controllo, poichè non può essere assolutamente disattivato da chi utilizza

Per accedere al ControlState è necessario fare l'override di alcune funzioni virtual, precisamente LoadControlState e SaveControlState, che si occupano rispettivamente di caricare e salvare il contenuto del ControlState nel ViewState, con un modello molto simile a quello previsto dal caricamento e salvataggio del ViewState stesso.

protected override void LoadControlState(Object savedState)
 {
  // lettura del ControlState di base
  Object[] rawState = (Object[])savedState;
  base.LoadControlState(rawState[0]);

  // proprietà che tiene memorizzato l'indice corrente
  _selectedIndex = (int)rawState[1];
}

protected override object SaveControlState()
{
  // scrittura del ControlState di base
  Object[] rawState = new Object[2];
  rawState[0] = base.SaveControlState();

  // salvataggio della proprietà con l'indice corrente
  rawState[1] = _selectedIndex;
  return rawState;
}

Anche disattivando il ViewState, si può notare che comunque il campo contiene alcune informazioni.
Questo avviene perchè anche il ControlState viene salvato nello stesso campo nascosto del ViewState, come ultimo nodo nell'albero del ViewState, sotto forma di un oggetto di tipo HybridDictionary, a patto che almeno uno dei controlli della pagina ne faccia uso.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi