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

时间:2015-05-10 14:24:15

标签: c# asp.net-mvc asp.net-mvc-4

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

class TestViewModel
{
    [DropDownList(typeof(MyEnums.EnumTest)]
    public int MyProp {get; set;}
}

我无法通过枚举作为参数,我只能这样做通过枚举类型,如下所示:

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);
}

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

{{1}}

问题是我没有枚举,我只有类型,因为它需要是通用的。因此,我无法进行强制转换以创建所需的列表作为&#34; HtmlHelper.DropDownListFor&#34;的参数。

1 个答案:

答案 0 :(得分:1)

我解决了它,只使用&#34; Enum&#34;,然后选择一个SelectListItem传递给DropDownList:

var enumList = Enum.GetValues(attribute.EnumType).Cast<Enum>().Select(x => new SelectListItem(){
                    Text = x.ToString(),
                    Value = Convert.ToInt32(x).ToString()
                });

感谢。