Il ViewState dei controlli creati runtime e aggiunti in seguito alla collezione Controls del controllo padre è ripristinato in base al proprio indice nella collezione e perchè ciò avvenga correttamente è necessario rispettare due semplici regole:
- a ogni PostBack i controlli devono essere ricreati e aggiunti esattamente nella stessa posizione;
- ogni nuovo controllo deve essere inserito alla fine della collezione Controls.
È possibile cambiare questo comportamento e far sì che il ViewState sia ripristinato utilizzando l'ID univoco del controllo, molto utile nel caso in cui la gerarchia dei controlli muti tra un PostBack e l'altro.
A questo scopo è sufficiente estendere una classe preesistente e decorarla con l'attributo ViewStateModeByIdAttribute.
Quindi per creare un PlaceHolder personalizzato è sufficiente utilizzare questo codice:
namespace CustomControl { [ViewStateModeByIdAttribute()] public class PlaceHolderPlus : PlaceHolder { } }
A questo punto dopo la registrazione del nuovo controllo è possibile utilizzare il WebControl come un normale PlaceHolder, ma con il vantaggio che il ViewState viene ripristinato correttamente a prescindere dal numero dei controlli che vengono ricreati al PostBack.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.