2011-05-26 35 views
13

是否有一种巧妙的方法让MVC脚手架为枚举值的模型属性呈现下拉列表或列表框?在ASP.NET MVC中使用枚举3

例子:

public class MyModel 
{ 
    public Color MyColor { get; set; } 
    public Option Options { get; set; } 
} 

public enum Color 
{ 
    None = 0, 
    Red = 1, 
    Blue = 2, 
    White = 3 
} 

[Flags] 
public enum Option 
{ 
    NotSet = 0, 
    Option1 = 1, 
    Option2 = 2, 
    Option3 = 4, 
    Option4 = 8 
} 

对于“颜色”属性,一个下拉菜单将是很好。而对于“选项”属性,复选框或复选框列表将很酷。

MVC框架/工具中是否存在任何种类的支持?目前,当我从模型创建视图时,Visual Studio会忽略枚举类型的模型属性。

什么是最好的实施方式?

回答

12

Helper方法

Dropdownlist for Enum

我在我自己的项目成功地利用这一点。

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression) 
{ 
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
    Type enumType = GetNonNullableModelType(metadata); 
    IEnumerable<TEnum> values = Enum.GetValues(enumType).Cast<TEnum>(); 

    TypeConverter converter = TypeDescriptor.GetConverter(enumType); 

    IEnumerable<SelectListItem> items = 
     from value in values 
     select new SelectListItem 
        { 
         Text = converter.ConvertToString(value), 
         Value = value.ToString(), 
         Selected = value.Equals(metadata.Model) 
        }; 

    if (metadata.IsNullableValueType) 
    { 
     items = SingleEmptyItem.Concat(items); 
    } 

    return htmlHelper.DropDownListFor(
     expression, 
     items 
     ); 
}