好的,我想我只是在这里犯了一个愚蠢的错误,但我想使用良好的 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;
为了坚持这些更改,我缺少什么线索吗?