Проблемы с перезагрузкой состояния моего динамически созданного элемента управления ASP.Net - PullRequest
0 голосов
/ 09 октября 2009

У меня есть контейнер вкладок ajax toolkit на моей странице ASP.Net, и я динамически создаю вкладки в коде (во время выполнения у меня есть переменное количество вкладок, каждая с одинаковым макетом, но разным текстом заголовка и данные тела). Каждая вкладка содержит только один элемент управления - пользовательский элемент управления, который я создал, чтобы все вкладки выглядели одинаково. В пользовательском элементе управления есть еще один пользовательский элемент управления, созданный для обработки подкачки моих данных на вкладке. Этот пользовательский элемент управления подкачкой имеет свойство, которое поддерживается его ViewState.

Я связываю все данные для вкладок в одной функции BindData на странице ASPX. В этой функции я всегда устанавливаю идентификатор для своих динамически создаваемых элементов управления и добавляю их в свои элементы управления контейнером, прежде чем устанавливать какие-либо другие свойства, события разводки или привязывать к ним данные.

Я теряю значение переменной ViewState в моем пользовательском элементе управления подкачкой в ​​этом сценарии:

главная страница ASPX

Page_Init:

    If IsPostBack Then
        BindData     ' Recreates the control tree on postback.
        ' ViewState is loaded successfully here.
    End If

Page_Load:

    If Not IsPostBack Then
        BindData()   ' Bind the initial data.
    End If

[Some event that happens after Page_Load in response to clicking on my user control]:

    ...
    BindData()    ' Controls recreated with changed data but same IDs as in Page_Init.
    ' ViewState does not get loaded back into my control tree.

Стоит ли ожидать, что ViewState снова загрузится во второй версии моего дерева управления в жизненном цикле страницы?

Ответы [ 2 ]

2 голосов
/ 09 октября 2009

После большого чтения кажется, что любые динамические элементы управления, созданные после фазы Init, не загружают ViewState. Для моей ситуации в моей функции BindData я собираю значения моего состояния представления в локальные переменные, воссоздаю элементы управления и затем сбрасываю значения состояния представления. Это похоже на работу.

0 голосов
/ 09 октября 2009

Вы должны создать динамические элементы управления в фазе перед инициализацией. И воссоздай их даже после постбэка. Проверьте подробности жизненного цикла страницы здесь: http://msdn.microsoft.com/en-us/library/ms178472.aspx

...