MVC3 DropDownList + ViewBag问题

这段代码工作正常

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

在我的HTML下

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

无论如何我得到了错误

CS1973:’System.Web.Mvc.HtmlHelper’没有名为’DropDownList’的适用方法,但似乎有一个名称的扩展方法。 无法动态分派扩展方法。 考虑转换动态参数或调用扩展方法而不使用扩展方法语法。

我怎么解决它?

ViewBag是一个dynamic对象,不能直接在View中使用(基本上就是错误所说的)。 你需要施展它:

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

另一个选择是使用ViewData虽然它也可能需要强制转换。

您需要将ViewBag项(匿名)转换为SelectList:

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

另一种解决这个转换问题的方法,也就是我采用的首选方法,就是使用View Model并绕过ViewBag。