Pregunta

De acuerdo, creo que sólo estoy cometiendo un error estúpido aquí, pero yo quiero crear un control (derivado de System.Web.UI.Control) que es plegable, usando el buen ol' ASP.net ViewState / PostBack modelo.

Tengo una ImageButton en mi clase, que inicializar en el 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 es un valor lógico, y la CollapseImageClick simplemente alterna que:

    private void CollapseImageClick(object sender, ImageClickEventArgs e)
    {
        IsCollapsed = !IsCollapsed;
    }

Mis CreateChildControls entonces está comprobando este parámetro:

 protected override void CreateChildControls()
    {
        Panel pnl = new Panel();

        pnl.Controls.Add(_collapseImage);
        if(!IsCollapsed)
        {
            // Add some more Controls
        }
        Controls.Add(pnl);
    }

Por desgracia, no funciona. Hago clic en el ImageButton, la página no es la devolución de datos, pero no cambia su estado -. Si se amplió antes, todavía está amplió después

En el constructor, puse EnableViewState = true;

Cualquier idea de lo que me falta con el fin de persistir estos cambios?

¿Fue útil?

Solución

¿En realidad se guarda el estado de su panel (el booleano colapsado) en el estado de vista?

ViewState("collapsed") = Collapsed

El estado de vista no guarda automáticamente cualquier propiedad / variable que tiene, usted tiene que decirle qué hacer.

Otros consejos

Si ViewState no funciona para usted, siempre se puede tratar de almacenarla como una sesión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top