asp.net - 使用 Enum 作为 DropDownListFor 的数据源的无效转换异常
问题描述
我正在将枚举转换为IEnumerable<SelectListItem>
我的控制器,以便在DropDownListFor
助手中使用它。
var roleList = EnumHelper.GetSelectList(typeof(UserRole))
.Cast<UserRole>()
.Except(new UserRole[] { UserRole.Admin, UserRole.Corporate })
.Select(e => new SelectListItem { Text = e.ToString(), Value = ((int)e).ToString() });
ViewBag.SelectList = roleList;
我的剃刀代码看起来像
@Html.DropDownListFor(m => m.RoleID, (IEnumerable<SelectListItem>)ViewBag.SelectList)
但我收到一个错误
System.InvalidCastException:指定的强制转换无效。
为了确保它是一个有效的演员,我检查roleList
了控制器中的数据类型,它看起来很好,如下所示
在运行时,我通过调试确保它ViewBag.SelectList
不为空并且没有问题
但是当我展开结果时,我收到错误消息
解决方案
EnumHelper.GetSelectList
返回IList<SelectListItem>
然后Cast<UserRole>()
抛出异常,因为它不能SelectListItem
转换为UserRole
. 为了获得所有enum
值,请使用Enum.GetValues
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() });
推荐阅读
- python - 在不使用符号链接的情况下模拟指向 Python 脚本的符号链接
- gmail - 通过 Gmail REST API 发送的电子邮件/草稿无法在新的 Gmail 用户界面中打开
- scala - 如何动态获取火花数据框中列的数据类型
- charts - 如何调整 GraphViz 集群的边距?
- php - 如何从另一个变量和字符串中创建一个变量的名称?
- c++ - GCC 允许访问私有静态成员
- oracle - 由于 java.io.IOException: SQLException in nextKeyValue 导致 Sqoop 导入失败
- php - 在 Windows 上开发 Laravel 应用程序使用哪个堆栈?
- javascript - 使用全选将类添加到选中的复选框
- multithreading - 多线程暴力破解功能