ASP.NET Core 5 MVC 如何将数据库记录转为SelectListItem填充下拉列表
解决方案
你只需要将查询出来的NR_User集合显式转换为SelectListItem集合即可,推荐在控制器层完成类型转换,避免视图层掺杂业务逻辑。
步骤1:修改控制器代码
将原来处理hUsers的逻辑替换为转换SelectListItem的逻辑,冗余的hList变量可以直接删除:
public IActionResult Create() { // 转换用户集合为SelectListItem类型 var historyUserItems = _context.NR_Users .Select(u => new SelectListItem { Value = u.ID.ToString(), Text = u.Name }) .ToList(); // 插入默认选择项 historyUserItems.Insert(0, new SelectListItem { Value = "0", Text = "Select" }); ViewBag.historyUsers = historyUserItems; List<SelectListItem> options = new() { new SelectListItem { Value = "True", Text = "Yes" }, new SelectListItem { Value = "False", Text = "No" } }; ViewBag.options = options; return View(); }
步骤2:视图代码无需修改
你原有的视图绑定代码可以直接复用,asp-items会自动识别ViewBag.historyUsers的IEnumerable<SelectListItem>类型完成渲染。
可选:视图端临时转换方案
如果你不想修改控制器代码,也可以直接在视图层完成类型转换(不推荐,仅作为临时调试方案):
<div class="form-group col-md-4"> <label class="control-label">History PM</label> <select asp-for="History_PM" name="History_PM" class="form-control" asp-items="@((ViewBag.historyUsers as IEnumerable<EnvApp.Models.DB.NR_User>).Select(u => new SelectListItem { Value = u.ID.ToString(), Text = u.Name }))"> </select> <span asp-validation-for="History_PM" class="text-danger"></span> </div>
内容的提问来源于stack exchange,提问作者GrillOwner69420
相关产品推荐
相关产品推荐

