Question

D'accord, je pense que je fais juste une erreur stupide, mais je veux créer un contrôle (dérivé de System.Web.UI.Control) qui est pliable, en utilisant le bon vieux ASP.net ViewState / PostBack modèle.

J'ai un ImageButton dans ma classe, que je en cas initialise 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 est un booléen, et le juste CollapseImageClick permet de basculer:

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

Mon CreateChildControls est la vérification ce paramètre:

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

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

Malheureusement, il ne fonctionne pas. Je clique sur le ImageButton, la page est le fait postback, mais ça ne change pas son état -. Si elle a été élargie avant, il est encore élargi après

Dans le constructeur, je mets EnableViewState = true;

Toute idée de ce que je suis absent pour persister ces changements?

Était-ce utile?

La solution

Êtes-vous réellement économiser l'état de votre panneau (le booléen effondré) dans le viewstate?

ViewState("collapsed") = Collapsed

Le viewstate n'enregistre toute propriété / variable que vous avez pas automatiquement, vous devez lui dire quoi faire.

Autres conseils

Si ViewState ne fonctionne pas pour vous, vous pouvez toujours essayer de le stocker sous forme d'une session.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top