下拉菜单不显示View MVC上的数据

时间:2018-09-21 01:21:53

标签: c# asp.net-mvc linq asp.net-mvc-4

有人可以在下面的代码中为我提供帮助,它在视图上不显示任何内容

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 :(得分:2)

假设Vector{Vector{Vector{...{T}}}}中包含字符串列表,则应在代码块外部调用ViewBag.oox方法。

此外,您不需要显式的DropDownList构造函数(不是导致下拉菜单无法呈现的原因)。 List<string>方法返回一个IEnumerable,您可以将其用于辅助方法调用。

Select

@{ List<string> oo = ViewBag.oox; var obj = oo.Select(ch => new SelectListItem { Text = ch, Value = ch }); } @Html.DropDownList("xyz", obj) 方法返回SELECT元素标记的DropDownList。在代码块中调用它时,您不会在任何地方使用该方法的输出。当您在带有MvcHtmlString前缀的代码块之外进行调用时,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方法时,代码将崩溃。因此在使用前进行空检查是安全的。考虑使用强类型视图模型方法代替ViewBag / ViewData来传输此数据。

答案 1 :(得分:1)

您要在下面的代码中将<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script> <div id="canvas-holder"><canvas id="chart-area"></canvas></div>添加到其他新的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