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
相关产品推荐
相关产品推荐

