【问题标题】:Dropdown does not display data on View MVC下拉菜单在 View MVC 上不显示数据
【发布时间】:2018-09-21 18:46:45
【问题描述】:

有人可以在下面的代码中帮助我吗,它不会显示任何内容

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
    }

【问题讨论】:

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


    【解决方案1】:

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

    您也不需要显式的List&lt;string&gt; 构造函数(不是您的下拉菜单不呈现的原因)。 Select 方法返回一个 IEnumerable,您可以将它用于辅助方法调用。

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

    DropDownList 方法为 SELECT 元素标记返回 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 返回一个意外的值,您的代码将在调用Select 方法时崩溃。所以在使用它之前做一个空检查是安全的。考虑使用强类型视图模型方法而不是 ViewBag/ViewData 来传输这些数据。

    【讨论】:

    • 对答案进行了更新以解释它。希望对您有所帮助。
    【解决方案2】:

    您在下面这段代码中的其他新 List&lt;SelectListItem&gt; 实例中添加了 List&lt;SelectListItem&gt;,这是未显示项目的主要原因:

    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);
    

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      相关资源
      最近更新 更多