2009-10-21 9 views
9

Pendant le chargement de la page, l'index 0 était déjà sélectionné. Ensuite, cette instruction de code index sélectionné 1:System.Web.HttpException: Impossible de sélectionner plusieurs éléments dans une DropDownList

dropDownList.Items.FindByValue(myValue).Selected = true; 
// assume myValue is found at index 1 of dropDownList.Items 

A la fin de chargement de la page, la page se lit comme suit: "System.Web.HttpException: ne peut pas avoir plusieurs éléments sélectionnés dans un DropDownList."

Pourquoi ai-je reçu l'exception? Et comment puis-je le réparer?

+0

Quelle partie du message d'exception n'avez-vous pas comprise? –

+1

J'ai compris le contenu de l'exception. Cependant, je n'ai pas compris pourquoi cela s'est produit. J'ai plus tard compris. Voir ma réponse suivante –

Répondre

37

J'ai remarqué que les propriétés "Selected" de l'index 0 et de l'index 1 étaient true (dropDownList.Items [0] .Selected et dropDownList.Items [1] .Selected les deux étaient true). Toutefois, dropDownList.SelectedIndex était toujours 0, bien que l'index 1 ait été défini le plus récemment.

J'ai essayé de résoudre ceci en effaçant la sélection de liste au préalable.

dropDownList.ClearSelection(); 
dropDownList.Items.FindByValue(myValue).Selected = true; 

Mais cela n'a pas aidé. La même exception s'est produite.

Ce qui a aidé, a été mise en la valeur sélectionnée d'une autre manière:

dropDownList.SelectedIndex = dropDownList.Items.IndexOf(dropDownList.Items.FindByValue(myValue)); 

Maintenant, le changement de sélection dans toute la liste propage les. Donc, n'utilisez pas dropDownList.Items [x] .Selected = true/false pour changer la valeur sélectionnée d'une DropDownList. Au lieu de cela, utilisez dropDownList.SelectedIndex = x;

+1

Alternativement, vous pouvez utiliser 'ddl.Selected = val' qui est une variation plus facile que je préfère. Assurez-vous également que les données sont liées à votre 'DropDownList' avant de sélectionner la valeur désirée. Cela peut également provoquer cette erreur en essayant de sélectionner une valeur d'un ddl qui n'est pas encore rempli. J'ai accompli ceci avec un simple 'If ddl.Items.Count < 1 Then' ->' ddl.DataBind() '. Je suis sûr que ce n'est pas idéal, mais c'est une solution rapide pratique au moins. :) – Chiramisu

16

J'ai juste eu ce problème, et j'ai découvert qu'il était causé par quelque chose de différent. J'ajoutais même ListItem par exemple à plusieurs listes déroulantes:

ListItem item = new ListItem("Foo", "1"); 
ListItem item2 = new ListItem("Bar", "2"); 
ddl1.Items.Add(item); 
ddl2.Items.Add(item); 
ddl1.Items.Add(item2); 
ddl2.Items.Add(item2); 

Puis le réglage SelectedValue:

ddl1.SelectedValue = "1"; //sets the Selected property of item 
ddl2.SelectedValue = "2"; //sets the Selected property of item2 

Passer à l'ajout d'instances distinctes de ListItem résolu le problème.

Je pense que lorsque vous définissez la SelectedValue du DropDownList, il définit la propriété Selected sur la ListItem appropriée dans sa collection Items. Dans ce cas, à la fin du second bloc de code, les deux éléments sont sélectionnés dans les deux listes déroulantes.

+0

C'est le scénario qui m'a eu. J'ajoutais le même ListItem aux contrôles de liste déroulante mulitple. Vous devez lier un objet d'élément de liste unique à chaque contrôle dropdownlist unique. – paparush

+0

Cela m'a aidé aussi. Love stackoverflow ;-) – Sardaukar

+0

Merci Jefferson, je faisais pareil. J'ai eu de l'aide à partir de ça. –

0

J'ai eu un problème similaire mais dans un scénario légèrement différent. Je pensais que je devrais le poster et la résolution ici, car cela peut aider quelqu'un à gagner du temps si elles se trouvent dans mon scénario similaire.

D'abord le message d'erreur:

AMError: Sys.WebForms.PageRequestManagerServerErrorException: 
Sys.WebForms.PageRequestManagerServerErrorException: 
Cannot have multiple items selected in a DropDownList. 

Mon scénario:

j'utilisais à l'aide VisualStudio 2010 à l'étape par l'application (ASP VB Net) quand je rencontrais le problème. J'ai regardé les 2 dropdownlists sur la page, vérifié Internet et gaspillé plusieurs heures sans aucune résolution.

Résolution:

Puis je me suis feedup et liquide' VS 2010 et a pris une pause.Quand je suis revenu. J'ai réexécuté l'application et il n'y avait pas de problème. C'est à ce moment-là que j'ai réalisé mon erreur coûteuse: j'avais configuré une expression qui définissait la SelectedValue dans la fenêtre de veille du débogueur! D'où la multiplicité!

J'ai supprimé l'expression et tout allait bien --- Visual Studion 2010 capable de passer la section dropdownlist sur l'autre zone de mise au point de l'application.

Questions connexes