2012-03-10 3 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

9

Вы должны отдать свой ViewBag элемент (который является анонимным) в SelectList:

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

Другой метод, чтобы обойти эту проблему литья и от того, что я собираю предпочтительный способ, чтобы использовать View Model и объедините ViewBag все вместе.

Смежные вопросы