2012-08-24 17 views
8

Così ho il seguente (pseudo codice):mvc C# html.dropdownlist e viewbag

string selectedvalud = "C"; 
List<SelectListItem> list= new List<SelectListItem>(); 
foreach(var item in mymodelinstance.Codes){ 
    list.Add(new SelectListItem { Text = item.Name, Value = item.Id.Tostring(), Selected = item.Id.ToString() == selectedvalue ? true : false }); 
} 

ViewBag.ListOfCodes = list; 

il mio punto di vista:

<%: Html.DropDownList("Codes", (List<SelectListItem>)ViewBag.ListOfCodes , new { style = "max-width: 600px;" })%> 

ora, prima che raggiunga la vista, la "lista" lo ha popolato con oggetti e ha contrassegnato l'oggetto che è già selezionato. ma quando arriva alla vista, nessuna delle opzioni è contrassegnata come selezionata.

la mia domanda è, è possibile utilizzare un viewbag per passare gli elementi o devo usare un mezzo diverso? in quanto rimuove il flag selezionato sulle opzioni se lo utilizzo in questo modo.

+0

Si può interrompere il controller e ricontrollare che almeno un elemento di 'list' è stato contrassegnato come' Selected = true; '? Non credo che ViewBag stia scherzando con la tua lista. – StuartLC

+0

sì, l'ho fatto e segna l'opzione giusta. – gdubs

risposta

21

Prova in questo modo:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name"); 
ViewBag.Codes = "C"; 

e nella vista:

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" } 
) %> 

Per far funzionare tutto questo ovviamente deve avere un elemento con Id = "C" all'interno della vostra collezione, in questo modo:

ViewBag.ListOfCodes = new SelectList(new[] 
    { 
     new { Id = "A", Name = "Code A" }, 
     new { Id = "B", Name = "Code B" }, 
     new { Id = "C", Name = "Code C" }, 
    }, "Id", "Name"); 
+0

quale parte di questo seleziona "Codice C"? – gdubs

+1

Questo: 'ViewBag.Codes =" C ";'. E poiché nella vista hai usato i Codici come primo argomento per il tuo helper 'DropDownList', sceglierà il valore da ViewBag. Ovviamente le cose avrebbero potuto essere un milione di volte più chiare se avessi usato un modello di visualizzazione e un helper 'DropDownListFor' fortemente digitato e avessi dimenticato ViewBag che è quello che consiglio sempre alle persone. –

+0

sono d'accordo, lo farei anche io. ma in questo scenario, il valore da questa lista sarà aggiunto ad un altro valore di un altro elenco a discesa che finirà per essere scritto sull'istanza. vorrei che fosse modellato in modo diverso .. – gdubs

Problemi correlati