Con l'attributo [Personalizable] dichiariamo ad ASP.NET di voler persistere nello storage di default il valore di una property da noi creata all'interno della web part. E fin qui nulla da dire.
Peccato però che la property, se non contiene un semplice valore bensì un dato più complesso (collections o riferimenti a oggetti business) e questo viene modificato durante il ciclo di vita dell'applicazione - e quindi anche della web part - l'attributo [Personalizable] non è più sufficiente per persistere tale valore.
Occorre quindi utilizzare il metodo SetPersonalizationDirty()
quindi, una cosa di questo tipo:
public class EditorWebPart : WebPart
{
private BaseEditor _editor;
[Personalizable]
public BaseEditor Editor
{
get { return _editor; }
set { _editor = value; }
}
}
essendo Editor una property complessa, perchè ha come tipo BaseEditor, non si potrà persistere il suo stato (modificato) in questo modo:
EditorWebPart.Editor.Title = this.TitleText.Text;
EditorWebPart.Editor.Content = this.ContentText.Text;
poichè il meccanismo di personalization di ASP.NET non sarà in grado di accorgersi da solo che la property Editor è cambiata, quindi:
EditorWebPart.Editor.Title = this.TitleText.Text;
EditorWebPart.Editor.Content = this.ContentText.Text;
this.SetPersonalizationDirty();
aggiungendo, alla fine delle modifiche, il SetPersonalizationDirty() diremo ad ASP.NET di persistere lo stato nascosto della property.
powered by IMHO 1.3