MVC3 DropDownList + проблема ViewBag - PullRequest
26 голосов
/ 10 марта 2012

Этот код отлично работает

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 ]

72 голосов
/ 10 марта 2012

ViewBag - это объект dynamic, который нельзя использовать непосредственно из вашего представления (именно это и говорит ошибка). Вам нужно будет разыграть его:

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

Другой вариант - использовать ViewData, хотя для этого также может потребоваться приведение.

9 голосов
/ 10 марта 2012

Вам необходимо привести ваш элемент ViewBag (который является анонимным) к списку SelectList:

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

Еще один способ обойти эту проблему приведения и, как я понимаю, предпочтительный способ, это использовать View.Модель и байпас ViewBag все вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...