好吧,我想我只是在这里犯了一个愚蠢的错误,但是我想创建一个可折叠的Control(派生自System.Web.UI.Control),使用好的'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;
为了坚持这些变化,我有什么想法?
答案 0 :(得分:1)
您实际上是将面板的状态(折叠的布尔值)保存到视图状态吗?
ViewState("collapsed") = Collapsed
视图状态不会自动保存您拥有的任何属性/变量,您必须告诉它该做什么。
答案 1 :(得分:1)
如果ViewState不适合您,您可以尝试将其存储为会话。