【问题标题】:Why are the initial multiple selections of an Html.ListBox not visible?为什么 Html.ListBox 的初始多项选择不可见?
【发布时间】:2015-02-18 09:35:47
【问题描述】:

我正在测试一个新插件,它将多选 ListBox 转换为一组多个互斥的单选下拉列表。这应该很简单,因为我只想从选择的一些项目开始,但到目前为止我还没有找到答案。

我已将问题简化为以下简单的控制器代码(插件已关闭,因此不是一个因素):

List<SelectListItem> selectList2 = db.LookupType.Select(x => new SelectListItem() { Selected = x.LookupTypeId < 4, Value = x.LookupTypeId.ToString(), Text = x.Name }).ToList();
ViewBag.LookupTypeId2 = selectList2;

这将在前三个项目上标记Selected = true,因为 ID 从 1 开始(在调试器中确认前三个项目具有 Selected = true)。

视图看起来像这样:

@Html.ListBox("LookupTypeId2", (IEnumerable<SelectListItem>)ViewBag.LookupTypeId2, htmlAttributes: new { @class = "form-control"})

结果输出然而没有选择的项目

<select name="LookupTypeId2" class="form-control" id="LookupTypeId2" multiple="multiple">
    <option value="1">Degree</option>
    <option value="2">WorkdayLanguage</option>
    <option value="3">Language_Ability_Type_ID</option>
    <option value="4">National_ID</option>
    <option value="5">Phone_Device_Type_ID</option>
    <option value="6">Background_Check_Status_ID</option>
    <option value="7">Educational_Institution_Type_ID</option>
    <option value="8">Gender_Code</option>
    <option value="9">Military_Status_ID</option>
    <option value="10">Ethnicity_ID</option>
</select>

使用 CTRL-Click 等选择倍数没有问题,但初始选择不可见。我在这里错过了什么?

更新:根据下面的答案,我将其更改为 ListBoxFor

@Html.ListBoxFor(x=>x.LookupTypeId2, (IEnumerable<SelectListItem>)ViewBag.LookupTypeId2, htmlAttributes: new { @class = "form-control"})

已添加以下值初始化:

List<SelectListItem> selectList2 = db.LookupType.Select(x => new SelectListItem() { Selected = x.LookupTypeId < 4, Value = x.LookupTypeId.ToString(), Text = x.Name }).ToList();
lookup.LookupTypeId2 = new string[]{"1","2","3","4"};
ViewBag.LookupTypeId2 = selectList2;

还按照建议尝试了 int 数组:

List<SelectListItem> selectList2 = db.LookupType.Select(x => new SelectListItem() { Selected = x.LookupTypeId < 4, Value = x.LookupTypeId.ToString(), Text = x.Name }).ToList();
lookup.LookupTypeId2 = new int[]{1,2,3,4};
ViewBag.LookupTypeId2 = selectList2;

但仍然没有选择任何内容。

【问题讨论】:

    标签: asp.net-mvc razor listbox multiple-select


    【解决方案1】:

    首先你需要一个属性来绑定。多项选择只会回发一组值类型,但您尝试绑定到List&lt;SelectListItem&gt;。将属性(例如)public int[] SelectedItems { get; set; } 添加到您的模型中,然后使用

    @Html.ListBoxFor(m => m.SelectedItems, (IEnumerable<SelectListItem>)ViewBag.LookupTypeId2, htmlAttributes: new { @class = "form-control"})
    

    然后,如果SelectedItems 的值与任何选项匹配,则将选择这些选项,例如如果model.SelectedItems = new int[] { 2, 10 };,则在显示页面时将选择第二个和最后一个选项。绑定到属性时,您不(也不应该)设置SelectListItemSelected 属性。

    【讨论】:

    • 我不想使用 ListBoxFor。你能用 ListBox 做这个吗? (见更新)。我现在用 ListBox 试试。
    • 我也是,而且效果很好,所以我只能假设你有其他干扰
    • 您的编辑对于属性和选择列表仍然具有相同的属性名称。它们必须不同。
    • 啊.. 对于ListBox,它们必须相同,但对于ListBoxFor,它们必须不同。我将更改名称并重试。
    • 这行得通。当我重新创建@TrueBlueAussie 的情况时,我尝试了这个并为我解决了这个问题。
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2020-06-19
    • 2016-09-17
    相关资源
    最近更新 更多