У меня есть контейнер вкладок 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 снова загрузится во второй версии моего дерева управления в жизненном цикле страницы?