J'ai un ListBox auquel j'ajoute ListItems dans un codebehind. Le problème que j'ai est le ListBox ne voit pas les éléments sélectionnés. J'ai le ListBox étant peuplé dynamiquement en fonction de ce que l'utilisateur sélectionne à partir d'un DropDownList, de sorte que le DropDownList a AutoPostBack défini sur true. Je pense que c'est en quelque sorte causant le problème.ListBox n'obtenant pas les éléments sélectionnés
Ma méthode SelectedIndexChanged
, qui est utilisée chaque fois qu'un élément de DropDownList est sélectionné, appelle une méthode appelée PopulateListBox
. Voici ce que ces méthodes ressemble:
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));
}
Pour ce que ça vaut la peine, voici la DropDownList et 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" />
Ce que je suis en train de faire est d'ajouter une liste de chaînes (chaînes étant sélectionné éléments) en tant que variable de session en cliquant sur un bouton de soumission. Le bouton redirige vers une nouvelle page après que la liste a été ajoutée à la session. En passant par le débogueur, la liste des chaînes est vide au point où je l'ajoute à la session.
listbox.GetSelectedIndices()
ne renvoie rien.
Mise à jour
Je peux accéder aux éléments sélectionnés si je ne fais pas un changement dans la DropDownList. Le ListBox est initialement rempli sur le chargement de la page, et si je fais des sélections, ils sont reconnus. Si je sélectionne quelque chose dans DropDownList et que la ListBox est repeuplée, les sélections ne sont pas reconnues. La méthode Page_Load
ne fait que deux choses. Initialisées ma variable Api et appelle PopulateDropDown
, qui ressemble à ceci:
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();
}
Mais quand ne voyez-vous pas les éléments sélectionnés dans la liste? Lors de la modification de la sélection dans la liste déroulante? Ou vous avez un autre contrôle effectuant la publication? – dzendras
@dzendras: J'ai mis à jour le post en bas à ce sujet. –
Quand accédez-vous à la liste? PageLoad? Vérifiez si l'endroit où vous y accédez est correct selon le cycle de vie de la page ASP.NET (les premières étapes du traitement des commandes de demande n'ont pas leurs propriétés définies). Vérifiez également si vous n'effacez pas la zone de liste plus tôt dans le cycle de vie de la page. – dzendras