Динамически создавать элементы управления и сохранять значения элементов управления при обратной передаче - ASP.Net C # - PullRequest
5 голосов
/ 25 марта 2011

Учтите это -

Я разрешаю конечному пользователю динамически создавать элемент управления вкладками на странице ASP.Net, получая некоторые подробности. Для каждой добавленной вкладки я получаю некоторые настройки -

  1. Заголовок вкладки
  2. Содержимое вкладки
  3. Ссылка в нижнем колонтитуле

Так что я получаю эти данные для каждой вкладки. Пользователю предоставляется кнопка «Добавить вкладку» к еще одной вкладке. Поэтому мне нужно добавить еще одну панель настроек вкладок на странице, чтобы получить настройки вкладок. Но при этом я теряю значения, введенные в ранее созданной панели настроек динамической вкладки. Пользователь может добавить столько вкладок и ввести настройки для каждой вкладки. Наконец, когда они сохраняют его, я создаю элемент управления вкладками (на основе их настроек и содержимого) и отображаю элемент управления.

Поскольку элементы управления являются динамическими, я могу выбрать один из двух вариантов:

  1. Воссоздать ранее созданную панель настроек n - 1 вкладки при добавлении n-й вкладки. Таким образом, для каждого постбэка мне нужно заново создать панель настроек для каждой вкладки. Но я не знаю, как сохранить значения в этом случае.
  2. Добавьте панель настроек на стороне клиента с помощью простых элементов управления html, а на странице UnLoad выполните синтаксический анализ элементов управления -> Разобрать настройки -> Сохранить в скрытом поле -> Получить на стороне сервера. В этом случае я теряю все возможности на стороне сервера, где мне нужно написать сценарии проверки для элементов управления.

Есть идеи, как лучше это сделать?

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Я бы добавил элементы управления на стороне сервера, просто помните, что вам нужно пересоздать все элементы управления при каждой обратной передаче

Вы можете сохранить свои данные о любых элементах управления, которые должны бытьсозданный в viewstate, затем создайте дерево управления из этого в CreateChildControls

1 голос
/ 25 марта 2011

Один из способов - сохранить данные, необходимые для воссоздания вкладок в ViewState. Вы можете сделать это, например, во время мероприятия PreRender. При обратной передаче вам необходимо воссоздать элементы управления, которые были у вас изначально, сохраняя их исходные идентификаторы и их порядок в иерархии. Вы можете сделать это во время фазы LoadViewState.

Однажды в Page_Load вы можете создать новую вкладку

0 голосов
/ 25 марта 2011

Я реализовал вариант # 1 в прошлом.Вам нужно будет воссоздать дерево элементов управления в определенный момент жизненного цикла событий страницы, чтобы при возникновении события просмотра для восстановления состояния просмотра в нем были все необходимые элементы управления.Насколько я помню, вам также необходимо восстановить все элементы управления в точно такой же иерархии и с идентичными именами, которые существовали, когда страница отображалась и представление сохранялось до отправки клиенту.Если есть какие-либо расхождения, загрузка viewstate не будет работать для динамических элементов управления.

...