我有一个asp.net-mvc网页,我想显示一个基于枚举的下拉列表。我想显示每个枚举项的文本,并且id是与枚举关联的int值。有什么优雅的方法可以进行这种转换吗?
Answers:
您可以使用LINQ:
Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
从MVC 5.1开始,如果需要在视图中填充选项,最优雅的方法是使用Html帮助程序的EnumDropDownListFor方法select
:
@Html.EnumDropDownListFor(m => m.MyEnumProperty,new { @class="form-control"})
或控制器中EnumHelper的GetSelectList方法:
var enumList = EnumHelper.GetSelectList(typeof (MyEnum));
使用我的扩展方法非常容易。这还允许您提供诸如添加占位符,分组和禁用某些值或组之类的选项。试试看。
enum Color
{
Blue,
[Category("Light")]
[DisplayName("Light Blue")]
LBlue,
[Category("Dark")]
[DisplayName("Dark Blue")]
DBlue,
Red,
[Category("Dark")]
[DisplayName("Dark Red")]
DRed,
[Category("Light")]
[DisplayName("Light Red")]
LRed,
Green,
[Category("Dark")]
[DisplayName("Dark Green")]
DGreen,
[Category("Light")]
[DisplayName("Light Green")]
LGreen
}
var list = typeof(Color).ToSelectList();
//or with custom options
var list = typeof(Color).ToSelectList(new SelectListOptions { Placeholder = "Please Select A Color"});