【问题标题】:MVC Listbox without ListItems没有 ListItems 的 MVC 列表框
【发布时间】:2026-02-06 03:15:02
【问题描述】:

我正在尝试显示 2 个列表框,其中一个包含所有可能的选择,其他将在用户选择他们的选择时填充,但由于某种原因我无法添加空列表框。

代码如下:

@Html.ListBox("somename")

& 我的错误是: 没有具有键“somename”的“IEnumerable”类型的 ViewData 项。

如果我将上面的代码行替换为以下代码,它可以正常工作,但我想要一个空的列表框:

@Html.ListBox("somename", liMyList)

其中 liMyList 是 SelectListItem。

在 MVC 中是否可以有一个空的列表框?请帮忙

【问题讨论】:

    标签: c# asp.net-mvc-4 listbox selectlistitem


    【解决方案1】:

    一个选项只是一个纯 HTML:

    <select name="somename" multiple="multiple">
    </select>
    

    另一个是提供一个空的项目列表:

    @Html.ListBox("somename", new List<SelectListItem>())
    

    【讨论】:

    • 太棒了。想知道为什么 @html.Listbox("name") 甚至是一个选项?愚蠢的微软
    【解决方案2】:

    我意识到这是一个较老的问题,但我解决这个问题的方法是在我的视图模型中有 2 个 IEnumerable 成员(我的模型使用 List)。第一个成员是可供选择的列表,第二个成员是选择的接收者,两个框之间的按钮用于管理移动所选项目。

    public class DataViewModel
    {
        // some other model members
        public List<SelectListItem> SourceList { get; set; }
        public List<SelectListItem> DestinationList { get; set; }
    }
    

    在我的控制器中,我只是为两个成员创建了新列表

    DataViewModel vm = new DataviewModel() {
        SourceList = new List<SelectListItem>(),
        DestinationList= new List<SelectListItem>(),
        // Other initialization
    }
    

    然后,我将从我使用的任何源填充源列表(在我的应用程序中,我从 Active Directory 检索用户列表)。如果您的应用程序允许显示当前选择以删除它们或仅显示它们,您还可以填充目标列表。但填充列表不是强制性的。

    然后,在我看来,我只是添加了具有适当绑定的两个列表:

    @model Application.WebApp.Models.DataViewModel
    <!-- Some HTML/Razor Markup -->
    <div class="form-group">
        <div class="col-sm-3">
            @Html.ListBoxFor(m => m.SourceList, Model.SourceList, new {size = 10})
        </div>
        <div class="col-sm-1">
            <input type="submit" class="btn" value="--&gt;&gt;" name="Action"/>
            <input type="submit" class="btn" value="--&gt;" name="Action"/>
            <input type="submit" class="btn" value="&lt;--" name="Action"/>
            <input type="submit" class="btn" value="&lt;&lt;--" name="Action"/>
        </div>
        <div class="col-sm-3">
            @Html.ListBoxFor(m => m.DestinationList, Model.DestinationList, new {size = 10})
        </div>
    </div>
    <!-- Some HTML/Razor Markup -->
    

    对于视图,您可能需要使用标记来满足您的目的。

    【讨论】: