Вопрос

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

Любая подсказка, чего мне не хватает, чтобы сохранить эти изменения?

Это было полезно?

Решение

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

ViewState("collapsed") = Collapsed

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top