使用ASP.NET MVC 3中的枚举

是否有一种聪明的方法可以让MVC脚手架为枚举值的模型属性呈现下拉列表或列表框?

例:

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 } 

对于“Color”属性,下拉列表会很好。 对于“选项”属性,combobox或复选框列表会很酷。

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

实现这个的最佳方法是什么?

辅助方法

Enum的下拉列表

我在自己的项目中成功地使用了它。

 public static MvcHtmlString EnumDropDownListFor(this HtmlHelper htmlHelper, Expression> expression) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); Type enumType = GetNonNullableModelType(metadata); IEnumerable values = Enum.GetValues(enumType).Cast(); TypeConverter converter = TypeDescriptor.GetConverter(enumType); IEnumerable 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 ); } 

这里有一个很好的解决方案: 如何从ASP.NET MVC中的枚举创建下拉列表?

显然,这是下拉列表,但对于您希望的其他UI选项,您可以使用值集合通过循环创建它们。

不是内置的,但很容易做到。