Asp.net mvc 使用值为-1的枚举填充DropDownList,并将其放在第一个位置

Asp.net mvc 使用值为-1的枚举填充DropDownList,并将其放在第一个位置,asp.net-mvc,asp.net-mvc-3,enums,html.dropdownlistfor,dropdownlistfor,Asp.net Mvc,Asp.net Mvc 3,Enums,Html.dropdownlistfor,Dropdownlistfor,我使用的是ASP.NET MVC3,我试图用Enum填充DropDownList 我的问题是枚举从-1开始,并且DropDownList已正确填充,但第一项(无论哪个项具有-1值)始终是我的DropDownList的最后一项;然而,我需要它在第一个位置 这是我的.cshtml @Html.DropDownListFor(m => m.MyEnumMax, new SelectList(Enum.GetValues(typeof(MyEnum))), new { @id = "myId",

我使用的是
ASP.NET MVC3
,我试图用
Enum
填充
DropDownList
我的问题是枚举从
-1
开始,并且
DropDownList
已正确填充,但第一项(无论哪个项具有
-1
值)始终是我的
DropDownList
的最后一项;然而,我需要它在第一个位置

这是我的
.cshtml

@Html.DropDownListFor(m => m.MyEnumMax, new SelectList(Enum.GetValues(typeof(MyEnum))), new { @id = "myId", @class = "myClass" })
这里,
MyEnumMax
是一个表示
MyEnum
成员的字符串属性(也许这就是问题所在?但是,拥有这个字符串属性确实对我在项目中的其他地方有所帮助)

枚举看起来就像

public enum MyEnum
{
    Undefined = -1,
    Member1,
    Member 2
}
因此,在我看来,我的ddl lloks如下:

  • 成员1
  • 成员2
  • 未定义
鉴于我需要:

  • 未定义
  • 成员1
  • 成员2
我尝试了一些
OrderBy(x=>x.Value)
,但它不在乎,仍然在最后一个位置显示Undefined。
任何关于代码示例的帮助()都值得赞赏

您只需按其int值对Enum进行排序

代码:

@Html.DropDownListFor(m => m.TestEnumValue,Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.OrderBy(e => (int)e)
.Select(e => new  SelectListItem 
{ 
    Text  = e.ToString(), 
    Value  = ((int)e).ToString()
} ))
@Html.DropDownListFor(m=>m.TestEnumValue,Enum.GetValues(typeof(MyEnum))
.Cast()
.OrderBy(e=>(int)e)
.选择(e=>new SelectListItem
{ 
Text=e.ToString(),
Value=((int)e).ToString()
} ))
您还需要强制转换GetValues以获得键入的版本:
GetValues(typeof(MyEnum))。强制转换

结果: