【发布时间】:2020-09-25 06:02:34
【问题描述】:
我正在为“医疗用品”制作一个强类型的更新/创建视图,其中用户可以从收到List<SelectListItem> 的下拉列表中选择多个选项(“套件”)。该列表是<select multiple="multiple">。它原本可以完美运行,但我一定是不小心改变了一些东西。
现在下拉列表不显示传递给它的 SelectListItems 为 selected = true 为已选择(由 VS 调试器验证),因此我可以选择新项目但不能取消选择以前选择的项目。我需要它来比较新选择的 ID 列表与旧选择的 ID 列表,以确定必须从 Db 中删除的内容。
这是我的视图模型:
public class MedicalSupplyViewModel
{
public MedicalSupplyViewModel()
{
Supply = new MedicalSupply();
KitList = new List<SelectListItem>();
KitIds = new List<int>();
}
public MedicalSupply Supply { get; set; }
public List<SelectListItem> KitList { get; set; }
public string StringKits { get; set; }
public List<int> KitIds { get; set; }
public void KitStringSet()
{
IEnumerable<string> KitNames = Supply.KitSupplies.Select(ks => ks.Kit.Name);
StringKits = Supply.KitSupplies.Count() == 0 ? "N/A" : string.Join(", " , KitNames);
}
}
这是我认为相关的cshtml:
<select multiple="multiple" class="form-control" id="kit_select" asp-for="KitIds" asp-items="Model.KitList"></select>
这是该页面的控制器方法的一部分,用于创建SelectListItems:
DetailsModel.KitList = _db.Kits.ToList().ConvertAll(k =>
{
return new SelectListItem()
{
Value = k.Id.ToString(),
Text = k.Name,
Selected = SelectedKits.Contains(k)
};
});
即使将项目设置为 selected = true 也不会显示它们。我在所有地方都设置了断点,包括在视图中,除了呈现的 html 之外,我找不到所选属性与它应该在任何地方的差异。我还使用了不同的浏览器,并花了几个小时搜索互联网和这个网站。
这个问题的原因可能是什么?
【问题讨论】:
标签: asp.net asp.net-core razor drop-down-menu asp.net-core-mvc