2009-05-19 5 views
0

좋아, 내가 여기서 바보 같은 실수를하고있는 것 같아.하지만 좋은 접두사를 사용하여 접을 수있는 Control (System.Web.UI.Control에서 파생 됨) ASP.net ViewState/PostBack 모델.ASP.net에서 접을 수있는 패널

내가합니다 (하는 OnInit에서 초기화 내 클래스) 이벤트에하여 ImageButton이 있습니다

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은 부울입니다, 그리고 CollapseImageClick 그냥 전환 :

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

내을 CreateChildControls을 이 매개 변수를 확인하는 중입니다.

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

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

불행히도, 작동하지 않습니다. ImageButton을 클릭하면 페이지가 포스트 백이되지만 상태가 변경되지 않습니다. 이전에 확장 된 경우에는 여전히 확장 된 상태입니다.

생성자에서 EnableViewState = true로 설정합니다.

이러한 변경 사항을 유지하기 위해 내가 놓친 실마리가 있습니까?

+0

그냥 AjaxControlToolkit에서 CollapsiblePanelExtender를 사용하지 마십시오 –

+0

나중에 설정을 유지해야하며 Sharepoint 환경에서 설정하는 것이 다소 복잡하기 때문에 ASP.net AJAX를 사용하고 싶지는 않습니다. 또한, 그 이득은 노력을하기에는 너무 낮게 보입니다. 더 자주 필요하다면 jQuery를 포함시켜 보겠습니다. –

답변

1

실제로 패널의 상태 (접힌 부울)를 viewstate에 저장하고 있습니까?

ViewState("collapsed") = Collapsed 

viewstate는 사용자가 가지고있는 속성/변수를 자동으로 저장하지 않으므로 수행 할 작업을 알려야합니다.

+0

아, 이제 바보 같아. 맞아. 나는 내일 프로젝트에 돌아 왔을 때 그것을 확인할 것입니다. 그러나 어떤 이유로 저는 속성이 자동으로 지속된다고 생각했습니다. –

1

ViewState가 작동하지 않는 경우 언제든지 세션으로 저장할 수 있습니다.

관련 문제