2012-03-10 19 views
25

Questo codice funziona beneMVC3 DropDownList + ViewBag problema

List<StateModelView> stateList = (from x in db.States 
           select new StateModelView { 
            ID = x.ID, 
            StateName = x.StateName 
           }).OrderBy(w => w.StateName).ToList(); 

ViewBag.StateList = new SelectList(stateList, "ID", "StateName"); 

in HTML ho

@Html.DropDownList("StateList", ViewBag.StateList) 

Comunque ho ottenuto l'errore

CS1973: 'System.Web.Mvc.HtmlHelper 'non ha alcun metodo applicabile denominato' DropDownList 'ma sembra avere un metodo di estensione con quel nome. I metodi di estensione non possono essere inviati dinamicamente. Valuta la possibilità di trasmettere gli argomenti dinamici o chiamare il metodo di estensione senza la sintassi del metodo di estensione.

Come posso risolverlo?

risposta

71

Il ViewBag è un oggetto dynamic, che non può essere utilizzato direttamente dalla Vista (che è in pratica ciò che l'errore sta dicendo). Avrete bisogno di cast:

@Html.DropDownList("StateList", (SelectList) ViewBag.StateList) 

Un'altra opzione sarebbe quella di utilizzare ViewData anche se può anche richiedere casting.

+0

Ho usato '@ Html.DropDownListFor (model => model.Role.Id, (SelectList) ViewBag.RoleId)' che sembra funzionare correttamente – Ortund

9

È necessario lanciare il vostro articolo ViewBag (che è anonimo) ad un SelectList:

@Html.DropDownList("StateList", (SelectList)ViewBag.StateList) 

Un altro metodo per aggirare questo problema casting e da quello che ho capito il modo preferito, è quello di utilizzare una vista del modello e bypassare ViewBag tutti insieme.

Problemi correlati