Asp.net 无效的强制转换异常,其中使用枚举作为数据源来DropDownListFor

Asp.net 无效的强制转换异常,其中使用枚举作为数据源来DropDownListFor,asp.net,asp.net-mvc,razor,asp.net-mvc-5,Asp.net,Asp.net Mvc,Razor,Asp.net Mvc 5,我正在控制器中将枚举转换为IEnumerable,以便在DropDownList for helper中使用它 我的剃须刀代码看起来像 @Html.DropDownListFor(m => m.RoleID, (IEnumerable<SelectListItem>)ViewBag.SelectList) 但是我犯了个错误 System.InvalidCastException:指定的强制转换无效 为了确保它是一个有效的cast,我在controller中检查了roleLis

我正在控制器中将枚举转换为IEnumerable,以便在DropDownList for helper中使用它

我的剃须刀代码看起来像

@Html.DropDownListFor(m => m.RoleID, (IEnumerable<SelectListItem>)ViewBag.SelectList)
但是我犯了个错误

System.InvalidCastException:指定的强制转换无效

为了确保它是一个有效的cast,我在controller中检查了roleList的数据类型,它看起来很好,如下所示

在运行时,我通过调试确保ViewBag.SelectList不为null,并且没有任何问题

但当我展开结果时,会收到错误消息

EnumHelper.GetSelectList返回IList,然后强制转换引发异常,因为它无法将SelectListItem强制转换为UserRole。要获取所有枚举值,请使用enum.GetValues


好吧,我想当你试图在inte中将enum强制转换为int时,出现了一个问题。我相信你是想把abc演成int。将其解析为字符串并重新-run@Shahjahan谢谢你的评论。我试过了,但还是不行。intEnum.Member从enum中给出整数值。是否尝试过:@Html.DropDownListForm=>m.RoleID,ViewBag.SelectList?
@Html.DropDownListFor(m => m.RoleID, (IEnumerable<SelectListItem>)ViewBag.SelectList)
var roleList = Enum.GetValues(typeof(UserRole))
       .Cast<UserRole>()
       .Except(new UserRole[] { UserRole.Admin, UserRole.Corporate })
       .Select(e => new SelectListItem { Text = e.ToString(), Value = ((int)e).ToString() });