-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 回答
1

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

于 2009-05-19T16:32:56.610 回答