我创建了一个自定义属性,该属性将用于定义DropDownList中使用的属性。所以属性的代码是:
public class DropDownList : Attribute
{
public Type EnumType { get; set; }
public DropDownList(Type type)
{
this.EnumType = type;
}
}我不能将枚举作为参数传递,我只能这样传递类型的枚举,如下所示:
class TestViewModel
{
[DropDownList(typeof(MyEnums.EnumTest)]
public int MyProp {get; set;}
}我有一个HTML扩展,它需要像这样工作:
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“参数所需的列表。
发布于 2015-05-10 18:08:39
我解决了这个问题,只使用"Enum“进行强制转换,然后选择一个SelectListItem传递给DropDownList:
var enumList = Enum.GetValues(attribute.EnumType).Cast<Enum>().Select(x => new SelectListItem(){
Text = x.ToString(),
Value = Convert.ToInt32(x).ToString()
});谢谢。
https://stackoverflow.com/questions/30152510
复制相似问题