2009-05-19 20 views
0

Okay, ich denke, ich mache hier nur einen dummen Fehler, aber ich möchte ein Control erstellen (abgeleitet von System.Web.UI.Control), das zusammenklappbar ist, mit dem guten ol ' ASP.Net ViewState/PostBack-Modell.Zusammenklappbare Panel in ASP.net

Ich habe ein Image in meiner Klasse, die ich in der OnInit initialisieren() Ereignis:

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 ist ein boolean, und die CollapseImageClick nur schaltet es:

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

Mein Create überprüft dann diesen Parameter:

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

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

Leider funktioniert es nicht. Ich klicke auf den ImageButton, die Seite tut es Postback, aber dann ändert es seinen Status nicht - wenn es zuvor erweitert wurde, wird es nachher erweitert.

Im Konstruktor setze ich EnableViewState = true;

Irgendwelche Hinweise, die ich vermisse, um diese Änderungen zu bestehen?

+0

Warum nicht einfach den 'CollapsiblePanelExtender' im AjaxControlToolkit verwenden –

+0

Ich muss die Einstellung später beibehalten, und ich möchte nicht ASP.net AJAX verwenden, weil es ziemlich kompliziert ist, in einer Sharepoint-Umgebung einzurichten. Außerdem scheint der Gewinn für die Anstrengung zu niedrig zu sein, wenn ich das öfter brauche, würde ich stattdessen jQuery mit einbeziehen. –

Antwort

1

Speichern Sie tatsächlich den Status Ihres Panels (den ausgeblendeten booleschen Wert) in den Viewstatus?

ViewState("collapsed") = Collapsed 

Der Viewstatus speichert nicht automatisch alle Eigenschaften/Variablen, die Sie haben, Sie müssen ihm sagen, was zu tun ist.

+0

Ahh, jetzt fühle ich mich dumm, richtig. Ich werde das morgen überprüfen, wenn ich wieder bei dem Projekt bin, aber aus irgendeinem Grund dachte ich, dass Eigenschaften automatisch bestehen bleiben. –

1

Wenn ViewState nicht für Sie funktioniert, können Sie versuchen, es als Sitzung zu speichern.

Verwandte Themen