好吧,我觉得我只是做一个愚蠢的错误在这里,但我想创建一个控制(从System.Web.UI.Control派生)是可折叠的,使用好醇” ASP.net的ViewState /回传模型。

我有一个的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 =真;

任何线索我为了保存这些变化很想念?

有帮助吗?

解决方案

您实际保存您的面板(倒塌的布尔值)的状态到视图状态?

ViewState("collapsed") = Collapsed

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

其他提示

如果的ViewState不为你工作,你总是可以尝试将其保存为一个会话。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top