У меня есть ListBox, к которому я добавляю ListItems в коде позади.Проблема в том, что ListBox не видит выбранные элементы.У меня ListBox заполняется динамически в зависимости от того, что пользователь выбирает из DropDownList, поэтому DropDownList имеет AutoPostBack, установленный в true.Я думаю, что это как-то вызывает проблему.
Мой метод SelectedIndexChanged
, который используется всякий раз, когда выбирается элемент в DropDownList, вызывает метод с именем PopulateListBox
.Вот как выглядят эти методы:
protected void SelectedIndexChanged(object sender, EventArgs e)
{
string typeStr = type.SelectedItem.Text;
MyType = Api.GetType(typeStr);
PopulateListBox();
}
private void PopulateListBox()
{
listbox.Items.Clear();
foreach (PropertyInfo info in MyType.GetProperties())
listbox.Items.Add(new ListItem(info.Name));
}
Для чего это стоит, вот DropDownList и ListBox:
<asp:DropDownList runat="server" ID="type" width="281px" OnSelectedIndexChanged="SelectedIndexChanged" AutoPostBack="true" />
<asp:ListBox runat="server" ID="listbox" width="281px" height="200px" selectionmode="Multiple" />
Что я пытаюсь сделать, это добавить список строк (строки, являющиеся выбранными элементами) в качестве переменной сеанса после нажатия кнопки отправки.Кнопка перенаправляет на новую страницу после добавления списка в сеанс.Проходя в отладчике, список строк пуст в момент, когда я добавляю его в сеанс.
listbox.GetSelectedIndices()
ничего не возвращает.
Обновление
Я могу получить доступ к выбранным элементам, если я не внесу изменения в DropDownList.ListBox изначально заполняется при загрузке страницы, и если я делаю выбор, они распознаются.Если я выбираю что-то из DropDownList и список снова заполняется, выборки не распознаются.
Мой Page_Load
метод делает только две вещи.Он инициализирует мою переменную Api и вызывает PopulateDropDown
, которая выглядит следующим образом:
private void PopulateDropDown()
{
foreach (Type t in Api.GetAllTypes())
type.Items.Add(new ListItem(t.Name));
string typeStr = type.Items[0].Text;
Type = Api.GetType(typeStr);
PopulateListBox();
}