문제
좋아, 나는 여기서 바보 같은 실수를 저지르고 있다고 생각하지만, 좋은 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가 귀하를 위해 작동하지 않으면 항상 세션으로 저장하려고 시도 할 수 있습니다.
제휴하지 않습니다 StackOverflow