You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:36:01