Сохранение настроек видимости через постоянство в динамически создаваемых элементах управления - PullRequest
0 голосов
/ 23 июля 2010

У меня есть несколько сложный пользовательский элемент управления, созданный в C # .NET, который по сути является древовидной структурой.Элемент управления ctlGroup содержит список полей (которые также являются пользовательскими элементами управления - ctlFields) и список дочерних групп.Список данных, содержащий дочерние группы, создает новые экземпляры того же элемента управления ctlGroup, поскольку каждый из дочерних элементов может иметь список полей и список дочерних элементов и т. Д.Вот так.

Количество дочерних элементов в каждой группе конечно, и каждая дочерняя группа является записью в базе данных, поэтому бесконечная рекурсия невозможна.Элементы управления создаются и отображаются нормально, пока не произойдет постбэк.Мне удалось сохранить все данные, относящиеся к каждому динамически созданному элементу управления, довольно хорошо, за исключением обратной отправки.Часть, с которой у меня возникают проблемы, - это поддержание видимости определенных панелей на элементах управления с помощью обратной передачи.У каждой дочерней группы есть кнопка, которая расширяет и сворачивает часть тела.Я могу свернуть эту часть один раз, но как только я снова нажму кнопку (т.е. вызову обратную передачу), элемент управления сохранится, и его предыдущая настройка видимости будет потеряна.

Кажется, мне трудно найти способ хранить эту информацию.Я попытался сохранить состояние видимости в состоянии просмотра, но, похоже, эта информация не переносится при повторном создании элемента управления.

У кого-нибудь есть идеи, как это сделать?Я что-то упустил?

edit: Я должен уточнить, что элементы управления ctlGroup, созданные в списке данных, создаются динамически, потому что они являются рекурсивными вызовами.Я не знаю другого способа вызвать элемент управления из себя, но если бы это был лучший способ, я бы с удовольствием его услышал.

1 Ответ

0 голосов
/ 23 июля 2010

Мое предложение:

Храните идентификаторы «расширенных» опций в скрытом поле.Они также могут иметь рекурсивные связи с расширенными детьми.Это будет ваша древовидная структура "расширенных узлов".В JSON это будет выглядеть так (хранится в виде строки в скрытом поле):

[{
    id: "root1", 
    children: [{id: "sub-root1", children: []}, {id: "sub-root2", children: []}]
 },
 {
    id: "root2",
    children: []
 }]

Затем при обратной передаче прикрепите обработчик для события document.load ($addHandler(document, "load", function (){ ... }), которое анализирует скрытое полеJSON.Когда итератор посещает развернутый узел, он «щелкает» фактическую кнопку раскрытия (вызов .click() на найденном элементе).Это перестроит «расширенную» структуру.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...