2009-05-19 27 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はbooleanです、そして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("collapsed") = Collapsed 

viewstateは、あなたが持っているプロパティ/変数を自動的に保存しないので、何をすべきかを伝える必要があります。

+0

ああ、今私は愚かだと感じる。私は明日、私がプロジェクトに戻ったときにそれをチェックするつもりですが、何らかの理由でプロパティが自動的に持続すると思っていました。 –

1

ViewStateが機能しない場合は、いつでもセッションとして保存できます。

関連する問題