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

如何从含枚举属性的对象列表生成枚举值下拉选择列表

基于枚举生成下拉选择列表的解决方案

嘿,我懂你要的是直接基于枚举本身生成下拉选项,而不是依赖templateList里的Template对象属性对吧?毕竟你要的是枚举所有可能的选项,而不是列表里已有的Template类型。下面是具体的实现步骤:

1. 先确保能读取到枚举的StringValue特性

首先,我们需要一个辅助方法来提取枚举值上的StringValue特性,因为.NET默认没有直接提供这个能力。如果你的项目里还没定义StringValueAttribute,先补上这个特性类:

public class StringValueAttribute : Attribute
{
    public string Value { get; }

    public StringValueAttribute(string value)
    {
        Value = value;
    }
}

然后写一个枚举的扩展方法,用来快速获取特性值:

public static class EnumExtensions
{
    public static string GetStringValue(this Enum enumValue)
    {
        var fieldInfo = enumValue.GetType().GetField(enumValue.ToString());
        var stringValueAttr = fieldInfo?.GetCustomAttributes(typeof(StringValueAttribute), false)
            .FirstOrDefault() as StringValueAttribute;
        
        // 如果没找到特性,就返回枚举的名称作为 fallback
        return stringValueAttr?.Value ?? enumValue.ToString();
    }
}

2. 生成下拉列表的数据源

接下来,我们直接枚举TemplateTypeEnum的所有值,转换成SelectListItem集合(或者直接构造SelectList):

// 获取枚举的所有有效值并强转成TemplateTypeEnum类型
var allTemplateTypes = Enum.GetValues(typeof(TemplateTypeEnum))
    .Cast<TemplateTypeEnum>();

// 转换成下拉选项需要的结构
var selectItems = allTemplateTypes.Select(type => new SelectListItem
{
    Value = ((int)type).ToString(), // 数据值用枚举的int型表示
    Text = type.GetStringValue()    // 显示文本用StringValue特性的值
}).ToList();

// 赋值给你的Model,替换掉原来依赖templateList的写法
Model.TemplateList = new SelectList(selectItems, "Value", "Text");

额外说明

  • 如果你不需要枚举的所有值,可以加个过滤条件,比如排除某个选项:
    var selectItems = allTemplateTypes
        .Where(type => type != TemplateTypeEnum.SomeUnwantedItem)
        .Select(type => new SelectListItem { ... })
        .ToList();
    
  • 这个方法完全不依赖templateList,不管你的Template列表里有没有对应类型的对象,下拉列表都会包含枚举的所有(或过滤后的)选项,更符合你“仅基于枚举值生成”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:57