Складная панель в ASP.net - PullRequest
0 голосов
/ 19 мая 2009

Хорошо, я думаю, что я просто делаю глупую ошибку здесь, но я хочу создать элемент управления (производный от 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 ]

1 голос
/ 19 мая 2009

Если ViewState у вас не работает, вы всегда можете попытаться сохранить его как сеанс.

1 голос
/ 19 мая 2009

Вы действительно сохраняете состояние своей панели (свернутого логического значения) в состоянии просмотра?

ViewState("collapsed") = Collapsed

Состояние просмотра автоматически не сохраняет любое имеющееся у вас свойство / переменную, вы должны указать ему, что делать.

...