Ich habe eine ListBox, die ich ListItems in einem Codebehind hinzufügen. Das Problem, das ich habe, ist, dass die ListBox die ausgewählten Elemente nicht sieht. Ich habe die ListBox dynamisch gefüllt, abhängig davon, was der Benutzer aus einer DropDownList auswählt, also hat die DropDownList AutoPostBack auf true gesetzt. Ich denke, das verursacht irgendwie das Problem.ListBox erhält keine ausgewählten Objekte
Meine SelectedIndexChanged
Methode, die immer dann verwendet wird, wenn ein Element in der DropDownList ausgewählt ist, ruft eine Methode namens PopulateListBox
auf. Hier ist, was diese Methoden wie folgt aussieht:
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));
}
Für das, was es wert ist, hier ist die Dropdownlist und List-Box:
<asp:DropDownList runat="server" ID="type" width="281px" OnSelectedIndexChanged="SelectedIndexChanged" AutoPostBack="true" />
<asp:ListBox runat="server" ID="listbox" width="281px" height="200px" selectionmode="Multiple" />
Was ich versuche zu tun ist, eine Liste von Strings hinzufügen (Strings wobei die ausgewählten Elemente) als Sitzungsvariable beim Klicken auf eine Senden-Schaltfläche. Die Schaltfläche leitet zu einer neuen Seite um, nachdem die Liste der Sitzung hinzugefügt wurde. Im Debugger ist die Liste der Strings an dem Punkt leer, an dem ich sie zur Sitzung hinzufüge.
listbox.GetSelectedIndices()
gibt nichts zurück.
aktualisieren
kann ich die ausgewählten Elemente zugreifen, wenn ich in der Dropdown keine Änderung vornehmen. Die ListBox wird anfänglich beim Laden der Seite gefüllt, und wenn ich eine Auswahl mache, werden sie erkannt. Wenn ich etwas aus der DropDownList wähle und die ListBox neu auffüllt, werden die Auswahlen nicht erkannt.
Meine Page_Load
Methode macht nur zwei Dinge. Er initialisiert meine Api Variable und ruft PopulateDropDown
, die wie folgt aussieht:
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();
}
Aber wann können Sie ausgewählte Elemente in der Listbox nicht sehen? Beim Ändern der Auswahl in der Dropdown-Liste? Oder haben Sie eine andere Kontrolle, die Postback durchführt? – dzendras
@dzendras: Ich habe den Beitrag unten in Bezug auf das aktualisiert. –
Wann greifen Sie auf die Listbox zu? PageLoad? Überprüfen Sie, ob der Ort, an dem Sie darauf zugreifen, gemäß dem ASP.NET-Seitenlebenszyklus in Ordnung ist (In frühen Stadien der Verarbeitung von Anforderungssteuerelementen sind die Eigenschaften nicht festgelegt). Überprüfen Sie auch, ob Sie die Listbox nicht früher im Seitenlebenszyklus löschen. – dzendras