2011-04-28 10 views
5

Sto riscontrando un problema con i menu a discesa e il viewbag. Io sono la creazione di un menu a discesa utilizzando il seguente codice nel mio controller:MVC 3 Dropdown che perde il valore selezionato con ViewBag

 applicationGuid = new Guid(form["applicationList"]); 

     var applications = _applicationRepository.List(); 

     ViewBag.applicationList = new SelectList(applications, "Id", "Name", applicationGuid); 

e nella vista, questo funziona perfettamente e restituisce il valore precedentemente selezionato (applicationGuid):

@Html.DropDownList("applicationList", "") 

Ora voglio usare il seguente codice come voglio aggiungere alcuni attributi alla discesa:

@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

ma per qualche ragione, il valore selezionato non viene resa (anche se si passa alla vista e non posso sE e selezionato = "true" rispetto all'elemento corretto nella lista di selezione di ViewBag).

I due esempi sopra il rendering come (questo ha il selezionato = "selezionato"):

<select id="applicationList" name="applicationList"><option value=""></option><option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select> 

e in questo modo (selezionato è andato !!):

<select class="required" id="applicationList" name="applicationList" rel="0"><option value=""></option><option value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select> 

Qualcuno può spiegare cosa sto facendo di sbagliato qui e perché sta perdendo il valore selezionato? Ho trovato una serie di post che spiegano come i nomi degli elementi di visualizzazione dei dati non possono essere scontrati, ma ho rimosso questo nome con nomi casuali e niente sembra funzionare! È un problema in MVC3?

risposta

14

Il problema sembra essere che quando si passa il SelectList come parametro a Html.DropDownList(), non gli piace che abbia lo stesso nome dell'elenco a discesa effettivo.

Ho copiato il codice e ho riscontrato lo stesso problema di te.

Ma appena ho cambiato

@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

a

@Html.DropDownList("applicationListX", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

ha prodotto l'uscita di lavoro:

<select class="required" id="applicationListX" name="applicationListX" rel="0"><option value=""></option> 
<option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option> 
<option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option> 
</select> 

Non so il motivo per cui questo è il caso, ma non c'è la tua soluzione.

+0

Grazie per la risposta Carson. Ho già provato questo e non ha funzionato per me. Ho appena provato di nuovo e sempre la stessa uscita. Non sono sicuro di quello che sto facendo in modo diverso da te. – user728848

+0

Dimentica quello .... questo funziona !! Quando ho cambiato il nome ho dimenticato di cambiare un po 'di codice che ha fatto questo: if (form ["applicationListX"]! = "" && form ["applicationListX"]! = Null) applicationGuid = new Guid (form ["applicationListX "]); quindi stavo perdendo il mio valore! Grazie per l'aiuto. – user728848

+0

Grazie mille! Funziona ora in modo impeccabile. Lo dichiarerei un bug ... – dampee

Problemi correlati