2009-10-21 10 views
9

Durante il caricamento della pagina, l'indice 0 era già selezionato. Indice allora questa affermazione codice selezionato 1:System.Web.HttpException: non è possibile selezionare più elementi in una DropDownList

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

Al termine del caricamento della pagina, la pagina si legge: "System.Web.HttpException: Non può avere più elementi selezionati in una DropDownList".

Perché ho ricevuto l'eccezione? E come posso ripararlo?

+0

Quale parte del messaggio di eccezione non hai capito? –

+1

Ho capito il contenuto dell'eccezione. Tuttavia, non ho capito perché si è verificato. Più tardi l'ho capito. Vedi la mia risposta successiva –

risposta

37

Ho notato che sia l'indice 0 che l'indice 1 avevano le proprietà "Selected" impostate su true (dropDownList.Items [0] .Selected e dropDownList.Items [1] .Selezionate entrambe erano vere). Tuttavia, dropDownList.SelectedIndex era ancora 0, anche se l'indice 1 è stato impostato l'ultima volta.

Ho provato a risolverlo cancellando in anticipo la selezione dell'elenco.

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

Ma questo non ha aiutato. La stessa eccezione si è verificata.

Che cosa ha fatto aiuto, tramontava il valore selezionato in un altro modo:

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

Ora i propaga cambiamento selezione tutto l'elenco.

Quindi, non utilizzare dropDownList.Items [x] .Selected = true/false per modificare il valore selezionato di DropDownList. Invece, usa dropDownList.SelectedIndex = x;

+1

In alternativa puoi usare 'ddl.Selected = val' che è una variante più semplice che preferisco. Inoltre, assicurati che i dati siano associati al tuo 'DropDownList' prima di selezionare il valore desiderato. Questo può anche causare questo errore provando a selezionare un valore da un ddl che non è ancora popolato. Ho realizzato questo con un semplice 'if ddl.Items.Count ' ddl.DataBind() '. Sono sicuro che questo non è l'ideale, ma è una soluzione rapida conveniente al minimo. :) – Chiramisu

16

Ho appena avuto questo problema e ho scoperto che era causato da qualcosa di diverso. Stavo aggiungendo lo stesso ListItem esempio per molteplici menù a discesa:

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); 

quindi impostando il SelectedValue:

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

commutazione ad aggiungere istanze separate di ListItem risolto il problema.

La mia ipotesi è che quando si imposta la SelectedValue del DropDownList, si imposta la proprietà Selected sulla appropriata ListItem nella sua collezione Items. Quindi in questo caso, alla fine del secondo blocco di codice, entrambi gli elementi sono selezionati in entrambi i menu a discesa.

+0

QUESTO è lo scenario che mi ha colpito. Stavo aggiungendo lo stesso ListItem a più controlli dropdownlist. Devi associare un oggetto item di elenco univoco a ciascun controllo univoco a discesa. – paparush

+0

Anche questo mi ha aiutato. Love stackoverflow ;-) – Sardaukar

+0

Grazie Jefferson, stavo facendo lo stesso. Ho ricevuto aiuto da questo. –

0

Ho avuto un problema simile ma in uno scenario leggermente diverso. Ho pensato che avrei dovuto postarlo e la risoluzione qui in quanto potrebbe aiutare qualcuno a risparmiare tempo se si trovano nel mio scenario simile.

In primo luogo il messaggio di errore:

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

mio scenario:

usavo con VisualStudio 2010 per passo attraverso l'applicazione (ASP VB Net), quando ho incontrato il problema. Ho guardato il 2 dropdownlists sulla pagina, ho controllato internet e perso diverse ore senza alcuna risoluzione.

Risoluzione:

poi mi sono feedup ed è uscito VS 2010 e ha preso una pausa.Quando tornai. Riesero l'applicazione e non ci sono stati problemi. In quel momento ho realizzato il mio errore costoso: avevo impostato un'espressione che impostava SelectedValue nella finestra di controllo del debugger! Da qui la molteplicità!

Ho rimosso l'espressione e tutto è andato bene --- Visual Studion 2010 in grado di superare la sezione dropdownlist sull'altra area di messa a fuoco dell'applicazione.

Problemi correlati