Предполагая, что ViewBag.oox
содержит список строк, вы должны вызывать метод DropDownList
вне вашего блока кода.
Также вам не нужен явный конструктор List<string>
( не является причиной того, что выпадающий список не отображает thougg ).Метод Select
возвращает IEnumerable, и вы можете использовать его для вызова вспомогательного метода.
@{
List<string> oo = ViewBag.oox;
var obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch });
}
@Html.DropDownList("xyz", obj)
Метод DropDownList
возвращает MvcHtmlString
для разметки элемента SELECT.Когда вы вызываете его внутри блока кода, вы нигде не используете вывод метода.Когда вы делаете вызов вне блока кода с префиксом @
, razor будет использовать вывод (разметку HTML) и использовать его для визуализации этой конкретной части страницы.
Так что, если вы абсолютно хотите вызватьметод внутри блока кода просто из любопытства.вы можете сохранить результат вызова метода и использовать его снаружи для его рендеринга.
@{
List<string> oo = ViewBag.oox;
var obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch });
MvcHtmlString selectMarkup = Html.DropDownList("xyz", obj);
}
@selectMarkup
В идеале вы должны следовать первому подходу, вызывая метод вне вашего блока кода.
Имейте в виду, что, если ViewBag.oox
вернет неожиданное значение, ваш код потерпит крах при вызове для этого метода Select
.Так что перед его использованием безопасно выполнить нулевую проверку.Попробуйте использовать строго типизированный подход модели представления вместо ViewBag / ViewData для передачи этих данных.