Pergunta

Ok, eu acho que só estou fazendo um erro estúpido aqui, mas eu quero criar um controle (derivado de System.Web.UI.Control) que é dobrável, usando o bom e velho ASP.net ViewState / PostBack modelo.

Eu tenho um ImageButton na minha classe, que eu inicializar no 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 é um booleano, eo CollapseImageClick apenas alterna-lo:

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

As minhas CreateChildControls é então verificar este parâmetro:

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

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

Infelizmente, ele não funciona. Eu clicar no ImageButton, a página faz isso de postagem, mas isso não muda seu estado -. Se ele foi expandido antes, ele ainda está expandido depois

No construtor, eu definir EnableViewState = true;

Qualquer idéia do que eu estou em falta, a fim de persistirem estas alterações?

Foi útil?

Solução

Você realmente salvar o estado do seu painel (a boolean entrou em colapso) no viewstate?

ViewState("collapsed") = Collapsed

O viewstate não automaticamente salvar qualquer propriedade / variável que você tem, você tem que dizer a ele o que fazer.

Outras dicas

Se ViewState não funciona para você, você poderia sempre tentar armazená-lo como uma sessão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top