-1

さて、私はここでばかげた間違いを犯していると思いますが、古き良き ASP.net ViewState/PostBack モデルを使用して、折りたたみ可能なコントロール (System.Web.UI.Control から派生) を作成したいと考えています。

クラスに ImageButton があり、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 はブール値で、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; を設定します。

これらの変更を永続化するために何が欠けているのか手がかりはありますか?

4

2 に答える 2

1

実際にパネルの状態 (折りたたまれたブール値) をビューステートに保存していますか?

ViewState("collapsed") = Collapsed

ビューステートは、所有しているプロパティ/変数を自動的に保存しません。何をすべきかを伝える必要があります。

于 2009-05-19T15:25:45.403 に答える