【发布时间】: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