Раскрывающийся список не отображает данные в View MVC - PullRequest
0 голосов
/ 21 сентября 2018

может кто-нибудь помочь мне в следующем коде, он ничего не отображает на виду

List<string> oo = ViewBag.oox;
    IEnumerable<SelectListItem> obj = new List<SelectListItem>(oo.Select(ch => new SelectListItem { Text = ch, Value = ch }));
    Html.DropDownList("xyz", obj);
    foreach (var item in obj)
    {
        @item.Value
    }

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы добавляете List<SelectListItem> внутрь другого нового экземпляра List<SelectListItem> в этом коде ниже, это основная причина, почему элементы не отображаются:

IEnumerable<SelectListItem> obj = new List<SelectListItem>(oo.Select(ch => new SelectListItem { Text = ch, Value = ch }));

Правильный путь - прямое использование Select вот так:

@{
    List<string> oo = ViewBag.oox;
    List<SelectListItem> obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch });
}

А затем используйте его в DropDownList или DropDownListFor:

@Html.DropDownList("xyz", obj);

@Html.DropDownListFor(m => m.xyz, obj);
0 голосов
/ 21 сентября 2018

Предполагая, что 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 для передачи этих данных.

...