Problema de MVC3 DropDownList + ViewBag

Este código funciona bien

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

under HTML I have

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

Anyway I got the error

CS1973: 'System.Web.Mvc.HtmlHelper' has no applicable method named 'DropDownList' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

How I can resolve it?

preguntado el 10 de marzo de 12 a las 00:03

2 Respuestas

El ViewBag es un dynamic object, which cannot be used directly from your View (that is basically what the error is saying). You'll need to cast it:

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

Otra opción sería utilizar ViewData though it may also require casting.

Respondido 03 Jul 13, 16:07

solía @Html.DropDownListFor(model => model.Role.Id, (SelectList)ViewBag.RoleId) which seems to work okay - Ortund

You need to cast your ViewBag item (which is anonymous) to a SelectList:

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

Another method to get around this casting issue and from what I gather the preferred way, is to use a View Model and bypass ViewBag all together.

respondido 10 mar '12, 00:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.