Складная панель в ASP.net
-
22-08-2019 - |
Вопрос
Хорошо, я думаю, что просто делаю здесь глупую ошибку, но я хочу создать элемент управления (полученный из 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;
Любая подсказка, чего мне не хватает, чтобы сохранить эти изменения?
Решение
Вы действительно сохраняете состояние своей панели (свернутое логическое значение) в состояние просмотра?
ViewState("collapsed") = Collapsed
Состояние просмотра не сохраняет автоматически какие-либо имеющиеся у вас свойства/переменные, вам нужно указать ему, что делать.
Другие советы
Если ViewState вам не подходит, вы всегда можете попытаться сохранить его как сеанс.