Я заменяю сетку, добавляя некоторые особенности клиента. Одна из функций - раскрывающееся меню для настройки размера страницы. Я расширяю сетку с помощью клиентского серверного элемента управления, который отлично подходит для того, что я делал до сих пор. Однако теперь у меня возникают проблемы с получением динамически добавляемого элемента управления для выполнения обратной передачи. JavaScript для инициации обратной передачи отсутствует.
Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
Dim pageSizePanel As New Panel
...
Dim countList As List(Of String) = GetCountList()
Dim pageSizeDropdown As New DropDownList()
pageSizeDropdown.ID = "pageSizeDropdown"
pageSizeDropdown.DataSource = countList
pageSizeDropdown.DataBind()
AddHandler pageSizeDropdown.SelectedIndexChanged, _
AddressOf HandlePageSizeChange
pageSizePanel.Controls.Add(pageSizeDropdown)
...
MyBase.Controls.AddAt(0, pageSizePanel)
MyBase.OnPreRender(e)
End Sub
HTML - это
<select name = "tab$grid1Tab$RadGrid1$pageSizeDropdown"
id = "tab_grid1Tab_RadGrid1_pageSizeDropdown">
<option selected = "selected" value = "10">10</option>
<option value = "20">20</option>
<option value = "40">40</option>
<option value = "80">80</option>
<option value = "All">All</option>
</select>
Итак, связано ли это с тем, что я «вбиваю» элементы управления? Связано ли это с динамическим добавлением элементов управления?





Вам необходимо установить для "AutoPostBack" значение true, чтобы выпадающий список использовался для обратной передачи. В противном случае другой элемент управления должен будет отправить форму обратно (однако событие SelectedIndexChanged сработает, когда это произойдет).
Первое, что я заметил, это то, что вам не хватает этого:
pageSizeDropdown.AutoPostBack = true
но я не уверен, что это все, что вам нужно для работы
вторая часть проблемы может быть связана с тем, что после того, как обратная передача попадает на сервер, он может не обязательно знать, что с ним делать, если этот элемент управления не существует, когда страница перестраивается (т.е. этот код, который строит вашу сетку данных, не пробегал еще). Я бы попробовал построить сетку в событии инициализации страницы
Я думаю, что необходимо создать элемент управления pageSizeDropdown и подключить событие ранее в жизненном цикле страницы, см. http://msdn.microsoft.com/en-us/library/ms178472.aspx. Динамически добавляемый элемент управления должен быть создан до события LoadComplete страниц, чтобы его событие элемента управления могло запускаться.
Вы правы в том, что это еще не все. Некоторые вещи ViewState вышли из строя.