2012-03-10 107 views
25

此代码工作正常MVC3的DropDownList + ViewBag问题

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

下HTML我有

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

无论如何,我得到了错误

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

我该如何解决?

回答

71

ViewBag是一个dynamic对象,它不能直接从您的视图中使用(这基本上是错误所说的)。你需要将其强制转换:

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

另一种选择是使用ViewData尽管它可能还需要铸造。

+0

我用'@ Html.DropDownListFor(model => model.Role.Id,(SelectList)ViewBag.RoleId)'这似乎工作好吗 – Ortund 2015-09-01 13:28:31

9

您需要将ViewBag项目(这是匿名)转换为的SelectList:

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

另一种方法来解决这个铸造的问题,从我收集的首选方法,是使用视图模型并一起绕过ViewBag。