문제

좋아, 나는 여기서 바보 같은 실수를 저지르고 있다고 생각하지만, 좋은 ol 'asp.net viewstate/postback 모델을 사용하여 접을 수있는 컨트롤 (system.web.ui.control에서 파생)을 만들고 싶습니다.

수업에는 imageButton이 있습니다.이 행사에서 초기화합니다.

    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는 부울이며, 붕괴는 단지 그것을 토글합니다.

    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을 클릭하면 페이지가 PostBack을 수행하지만 상태가 변경되지는 않습니다. 이전에 확장 된 경우 여전히 확장되었습니다.

생성자에서 enableViewState = true를 설정합니다.

이러한 변화를 지속하기 위해 내가 놓친 내용이 있습니까?

도움이 되었습니까?

해결책

실제로 패널의 상태 (붕괴 된 부울)를 ViewState에 저장하고 있습니까?

ViewState("collapsed") = Collapsed

ViewState는 보유한 속성/변수를 자동으로 저장하지 않으며 무엇을 해야하는지 알려야합니다.

다른 팁

ViewState가 귀하를 위해 작동하지 않으면 항상 세션으로 저장하려고 시도 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top