Reputation: 37633
This code works fine
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?
Upvotes: 29
Views: 26787
Reputation: 18965
The ViewBag
is a 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)
Another option would be to use ViewData
though it may also require casting.
Upvotes: 77
Reputation: 2472
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.
Upvotes: 11