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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top