さて、私はここでばかげた間違いを犯していると思いますが、古き良き ASP.net ViewState/PostBack モデルを使用して、折りたたみ可能なコントロール (System.Web.UI.Control から派生) を作成したいと考えています。
クラスに 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; を設定します。
これらの変更を永続化するために何が欠けているのか手がかりはありますか?