質問

さて、私はちょうどここに愚かな間違いを犯していると思うが、私は「ASP.netのViewState /ポストバック良いオールを使用して、折りたたみ可能である(System.Web.UI.Controlから派生した)コントロールを作成したいですモデルます。

私はの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をクリックしてください - 。それはまだ後に拡大しています、それは以前に展開された場合は、

コンストラクタで、Iは設定EnableViewState = TRUE;

私はこれらの変更を永続化するために、行方不明です何をどれ手がかり?

役に立ちましたか?

解決

あなたが実際にビューステートにあなたパネル(崩壊ブール値)の状態を保存していますか?

ViewState("collapsed") = Collapsed

ビューステートが自動的にあなたが持っている任意のプロパティ/変数を保存していない、あなたは何をすべきか、それを指示する必要があります。

他のヒント

、ViewStateがあなたのために動作しない場合、あなたは常にセッションとしてそれを保存しようとすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top