【问题标题】:Collapsible Panel in ASP.netASP.net 中的可折叠面板
【发布时间】:2009-05-19 15:21:47
【问题描述】:

好吧,我想我只是在这里犯了一个愚蠢的错误,但我想创建一个可折叠的控件(派生自 System.Web.UI.Control),使用好的 ol' 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;

有什么线索可以让我坚持这些更改吗?

【问题讨论】:

  • 为什么不在 AjaxControlToolkit 中使用 CollapsiblePanelExtender
  • 我需要稍后保留设置,并且我不想使用 ASP.net AJAX,因为在 Sharepoint 环境中设置相当复杂。此外,对于这项工作来说,收益似乎太低了,如果我需要更多的时候我会考虑使用 jQuery。

标签: c# asp.net web-controls


【解决方案1】:

您是否真的将面板的状态(折叠的布尔值)保存到视图状态中?

ViewState("collapsed") = Collapsed

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

【讨论】:

  • 啊,现在我觉得自己很愚蠢,对吧。明天我回到项目时会检查一下,但由于某种原因,我认为属性会自动保留。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多