Pannello comprimibile in ASP.net
-
22-08-2019 - |
Domanda
Va bene, penso che sto solo facendo un errore stupido qui, ma voglio creare un controllo (derivato da System.Web.UI.Control) che è pieghevole, utilizzando il buon vecchio' ASP.net ViewState / postback modello.
Ho un ImageButton nella mia classe, che inizializzo all'Evento OnInit ():
private ImageButton _collapseImage;
protected override void OnInit(EventArgs e)
{
if (_collapseImage == null)
{
_collapseImage = new ImageButton();
_collapseImage.Click += CollapseImageClick;
}
_collapseImage.ImageUrl = string.Format("/images/{0}", IsCollapsed ? "plus.gif" : "minus.gif");
_collapseImage.Width = 16;
_collapseImage.Height = 16;
}
isCollapsed è un valore booleano, e il CollapseImageClick appena alterna esso:
private void CollapseImageClick(object sender, ImageClickEventArgs e)
{
IsCollapsed = !IsCollapsed;
}
I miei CreateChildControls viene poi controllando questo parametro:
protected override void CreateChildControls()
{
Panel pnl = new Panel();
pnl.Controls.Add(_collapseImage);
if(!IsCollapsed)
{
// Add some more Controls
}
Controls.Add(pnl);
}
Purtroppo, non funziona. Clicco sul ImageButton, la pagina non è postback, ma poi non cambia è stato -. Se è stato ampliato prima, è ancora ampliato dopo
Nel costruttore, ho impostato EnableViewState = true;
Qualsiasi idea di cosa mi manca per persistere questi cambiamenti?
Soluzione
Stai in realtà il salvataggio dello stato del pannello (il booleano crollato) nel ViewState?
ViewState("collapsed") = Collapsed
Il viewstate non salva automaticamente qualsiasi proprietà / variabili che hai, devi dire che cosa fare.
Altri suggerimenti
Se ViewState non funziona per voi, si può sempre cercare di conservarlo come una sessione.