下拉列表不显示 View MVC 上的数据

Dropdown does not display data on View MVC

谁能帮我写下面的代码,它在视图中没有显示任何内容

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
    }

假设 ViewBag.oox 中有一个字符串列表,您应该在代码块之外调用 DropDownList 方法。

此外,您不需要显式 List<string> 构造函数(不是您的下拉列表不呈现 thoughg 的原因)。 Select 方法 returns 一个 IEnumerable,您可以将其用于辅助方法调用。

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

DropDownList 方法 returns 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 returns 是一个意外的值,您的代码将在对该值调用 Select 方法时崩溃。所以在使用它之前进行空检查是安全的。考虑使用强类型视图模型方法而不是 ViewBag/ViewData 来传输此数据。

您在下面这段代码中的其他新 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 });
}

然后在DropDownListDropDownListFor中使用:

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

@Html.DropDownListFor(m => m.xyz, obj);