首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将枚举作为注释参数传递并获取项列表

将枚举作为注释参数传递并获取项列表
EN

Stack Overflow用户
提问于 2015-05-10 14:24:14
回答 1查看 160关注 0票数 1

我创建了一个自定义属性,该属性将用于定义DropDownList中使用的属性。所以属性的代码是:

代码语言:javascript
复制
public class DropDownList : Attribute
{
    public Type EnumType { get; set; }

    public DropDownList(Type type)
    {
        this.EnumType = type;
    }
}

我不能将枚举作为参数传递,我只能这样传递类型的枚举,如下所示:

代码语言:javascript
复制
class TestViewModel
{
    [DropDownList(typeof(MyEnums.EnumTest)]
    public int MyProp {get; set;}
}

我有一个HTML扩展,它需要像这样工作:

代码语言:javascript
复制
public HtmlString AddSelectFor<TValue>(Expression<Func<TModel, TValue>> expression)
{
    var memberExpression = expression.Body as MemberExpression;
    var attribute = memberExpression.Member.GetCustomAttributes(typeof(MyProj.Attributes.DropDownList), false).FirstOrDefault() as MyProj.Attributes.DropDownList;

    // HERE i need to get the list of enum itens
    var items = Enum.GetValues(attribute.EnumType);
    return HtmlHelper.DropDownListFor(expression, list);
}

问题是我没有枚举,我只有类型,因为它需要是通用的。因此,我不能进行强制转换来创建作为"HtmlHelper.DropDownListFor“参数所需的列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-10 18:08:39

我解决了这个问题,只使用"Enum“进行强制转换,然后选择一个SelectListItem传递给DropDownList:

代码语言:javascript
复制
var enumList = Enum.GetValues(attribute.EnumType).Cast<Enum>().Select(x => new SelectListItem(){
                    Text = x.ToString(),
                    Value = Convert.ToInt32(x).ToString()
                });

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30152510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档