【发布时间】:2009-05-19 15:21:47
【问题描述】:
好吧,我想我只是在这里犯了一个愚蠢的错误,但我想创建一个可折叠的控件(派生自 System.Web.UI.Control),使用好的 ol' 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;
有什么线索可以让我坚持这些更改吗?
【问题讨论】:
-
为什么不在 AjaxControlToolkit 中使用
CollapsiblePanelExtender -
我需要稍后保留设置,并且我不想使用 ASP.net AJAX,因为在 Sharepoint 环境中设置相当复杂。此外,对于这项工作来说,收益似乎太低了,如果我需要更多的时候我会考虑使用 jQuery。
标签: c# asp.net web-controls