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

ASP.NET Core中C#实现数据库源下拉列表及SelectListItem过时问题

在ASP.NET Core中实现从数据库获取数据的下拉列表(解决SelectListItem过时问题)

一、定义视图模型(DTO)

先保留你的AddUserRoleDto,注意引用Microsoft.AspNetCore.Mvc.Rendering命名空间来使用SelectListItem:

using Microsoft.AspNetCore.Mvc.Rendering;

public class AddUserRoleDto
{
    public string Id { get; set; }
    public string Role { get; set; }
    public List<SelectListItem> Roles { get; set; }
}

二、控制器中从数据库获取数据并构建下拉选项(修正过时写法)

如果你的代码里new SelectListItem { Text = ..., Value = ... }被提示过时,推荐用官方提供的静态方法SelectListItem.Create()创建实例,或者用SelectList类简化代码:

方式1:使用SelectListItem.Create()(解决过时提示)

public IActionResult AddUserRole(string Id)
{
    // 从RoleManager读取数据库角色数据,转换为SelectListItem集合
    var roleList = _roleManager.Roles
        .Select(p => SelectListItem.Create(p.Name, p.Name))
        .ToList();

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

方式2:使用SelectList类(更简洁)

你也可以把DTO中的Roles改为SelectList类型,直接用SelectList构建数据源:

// 修改后的DTO
public class AddUserRoleDto
{
    public string Id { get; set; }
    public string Role { get; set; }
    public SelectList Roles { get; set; }
}

// 控制器代码
public IActionResult AddUserRole(string Id)
{
    // 直接用SelectList绑定数据源,指定显示文本和值的字段名
    var roleSelectList = new SelectList(_roleManager.Roles, "Name", "Name");

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

三、在Razor视图中渲染下拉列表

用ASP.NET Core标签助手渲染强类型下拉列表,确保视图绑定到AddUserRoleDto:

@model AddUserRoleDto

<div class="form-group">
    <label asp-for="Role" class="control-label">选择角色</label>
    <!-- asp-for绑定DTO的Role属性,asp-items绑定下拉选项 -->
    <select asp-for="Role" asp-items="@Model.Roles" class="form-control">
        <option value="">请选择角色</option>
    </select>
    <span asp-validation-for="Role" class="text-danger"></span>
</div>

关键说明

  • 解决SelectListItem过时提示,优先用SelectListItem.Create()静态方法,这是ASP.NET Core后续版本推荐的实例创建方式,避免直接对象初始化的警告。
  • 确保控制器已正确注入RoleManager<IdentityRole>,用于从数据库读取角色数据。

内容的提问来源于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 01:17:38