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

ASP.NET如何将下拉列表数据源设为枚举 选中值为对应枚举数值

C#枚举绑定ASP.NET下拉列表正确实现方案

现有示例枚举定义

public enum SampleEnum
{
    Room1 = 1,
    Room2 = 2,
    Room3 = 3
}

原实现问题说明

原先用Enum.GetNames(typeof(SampleEnum))直接作为数据源,只能获取到Room1/Room2/Room3这类枚举名称字符串,没有关联枚举对应的整型数值,才会导致下拉列表的显示文本和选中值完全一致,拿不到预期的数字值。

修正后的绑定代码

核心思路是先把枚举转换成「显示文本-对应值」的对象集合,再显式指定下拉列表的文本字段和值字段做绑定:

private void PopulateMyList()
{
    ddlRoom.ClearSelection();
    ddlRoom.Items.Clear();
    ddlRoom.AppendDataBoundItems = true;
    // 添加默认提示项
    ddlRoom.Items.Add(new ListItem("Select...", ""));

    // 构造枚举的文本-值配对集合
    var enumSource = Enum.GetValues(typeof(SampleEnum))
        .Cast<SampleEnum>()
        .Select(enumItem => new 
        {
            ShowText = enumItem.ToString(),
            EnumValue = (int)enumItem
        })
        .ToList();

    // 分别指定下拉框显示字段、提交值字段
    ddlRoom.DataTextField = "ShowText";
    ddlRoom.DataValueField = "EnumValue";
    ddlRoom.DataSource = enumSource;
    ddlRoom.DataBind();
}

最终实现效果

绑定完成后,选中显示为

Room2
的选项时,ddlRoom.SelectedValue的取值就是
2
完全符合需求。

如果后续需要把选中值转回枚举类型,可以直接用强转实现:

if (int.TryParse(ddlRoom.SelectedValue, out int selectedVal))
{
    SampleEnum selectedEnum = (SampleEnum)selectedVal;
    // 直接使用selectedEnum处理业务逻辑即可
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:06:24