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

.NET 7中实现数据库数据源下拉框(SelectListItem已弃用)

在ASP.NET Core 7中实现从数据库获取选项的下拉框(替代已弃用的SelectListItem)

1. 调整视图模型(DTO)

将原模型中List<SelectListItem>类型的Roles替换为SelectList类型,同时明确用于绑定选中值的属性:

public class AddUserRoleDto
{
    public string Id { get; set; }
    public string SelectedRole { get; set; } // 绑定用户选择的角色值
    public SelectList Roles { get; set; } // 存储下拉框选项数据源
}

2. 控制器构造下拉框数据源

从数据库(通过_roleManager)获取角色数据,直接构造SelectList对象,无需手动创建SelectListItem实例:

public IActionResult AddUserRole(string Id)
{
    // 从数据库查询所有角色,提取名称作为选项的Value和Text
    var roleData = _roleManager.Roles.Select(r => new { r.Name });
    
    // 构造SelectList:参数依次为数据源、值字段名、文本字段名
    var roleSelectList = new SelectList(roleData, nameof(roleData.First().Name), nameof(roleData.First().Name));

    return View(new AddUserRoleDto
    {
        Id = Id,
        Roles = roleSelectList
    });
}

可选:自定义选项类(更灵活的场景)

如果需要扩展选项的额外属性,可自定义一个选项类,再构造SelectList:

// 自定义角色选项类
public class RoleOption
{
    public string Value { get; set; }
    public string Text { get; set; }
    // 可添加其他属性,比如Description等
}

// 控制器中构造数据源
public IActionResult AddUserRole(string Id)
{
    var roleOptions = _roleManager.Roles.Select(r => new RoleOption
    {
        Value = r.Name,
        Text = r.Name
    }).ToList();
    
    var roleSelectList = new SelectList(roleOptions, nameof(RoleOption.Value), nameof(RoleOption.Text));

    return View(new AddUserRoleDto
    {
        Id = Id,
        Roles = roleSelectList
    });
}

3. Razor视图渲染下拉框

使用ASP.NET Core的Tag Helper语法,强类型绑定下拉框的选中值和选项:

@model AddUserRoleDto

<form asp-action="AddUserRole" method="post">
    <input type="hidden" asp-for="Id" />
    
    <div class="form-group">
        <label asp-for="SelectedRole" class="control-label">选择角色</label>
        <select asp-for="SelectedRole" asp-items="@Model.Roles" class="form-control"></select>
        <span asp-validation-for="SelectedRole" class="text-danger"></span>
    </div>
    
    <button type="submit" class="btn btn-primary">保存角色</button>
</form>

核心说明

  • SelectList是ASP.NET Core官方推荐的下拉框数据源类型,替代了已弃用的List<SelectListItem>用法,封装了选项的核心信息,使用更简洁。
  • Tag Helper的asp-for和asp-items组合实现强类型绑定,避免硬编码,同时自动处理验证和选中状态。

内容的提问来源于stack exchange,提问作者rose

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:35:57