ASP.net中的可折叠面板

时间:2009-05-19 15:21:47

标签: c# asp.net web-controls

好吧,我想我只是在这里犯了一个愚蠢的错误,但是我想创建一个可折叠的Control(派生自System.Web.UI.Control),使用好的'ASP.net ViewState / PostBack模型。

我的类中有一个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;

为了坚持这些变化,我有什么想法?

2 个答案:

答案 0 :(得分:1)

您实际上是将面板的状态(折叠的布尔值)保存到视图状态吗?

ViewState("collapsed") = Collapsed

视图状态不会自动保存您拥有的任何属性/变量,您必须告诉它该做什么。

答案 1 :(得分:1)

如果ViewState不适合您,您可以尝试将其存储为会话。