У меня есть ListBox, в который я добавляю ListItems в выделенный код. У меня проблема в том, что ListBox не видит выбранные элементы. У меня ListBox заполняется динамически в зависимости от того, что пользователь выбирает из DropDownList, поэтому для DropDownList установлено значение True для параметра AutoPostBack. Я думаю, что это каким-то образом вызывает проблему.
Мой метод 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 и ListBox повторно заполняется, выбор не распознается.
Мой метод 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();
}