MVC3 DropDownList + ViewBag问题

29

这段代码运行正常。

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”的方法,但似乎有一个同名的扩展方法。 扩展方法不能进行动态分派。 考虑将动态参数强制转换或以不带扩展方法语法的方式调用扩展方法。

我该怎么解决它?

2个回答

77

ViewBag是一个dynamic对象,不能直接从你的视图中使用(这基本上就是错误信息在说什么)。你需要进行强制转换:

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

另一个选择是使用 ViewData ,但可能也需要进行强制类型转换。


1
我使用了@Html.DropDownListFor(model => model.Role.Id, (SelectList)ViewBag.RoleId),看起来工作正常。 - Ortund

11

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

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

绕过类型转换问题的另一种方法,据我所知也是首选的方法,就是使用视图模型并完全绕过 ViewBag。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接