Painel dobrável em ASP.net
-
22-08-2019 - |
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?
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.