将 ENUM 分配给下拉列表

本文关键字:下拉列表 分配 ENUM | 更新日期: 2023-09-27 18:32:30

好的,我已经查看了有关在DropDownLists中使用ENUM的不同网站,并且对使用自定义帮助程序将值传递到 ViewBag 然后再将它们传递给DDL的人有点困惑。

http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx

MVC4 下拉列表中的枚举值

http://webcache.googleusercontent.com/search?q=cache:http://www.ninjanye.co.uk/2012/01/creating-dropdown-list-from-enum-in.html

我在整个网站上使用了各种Html.DropDownList助手,但以前没有习惯ENUM DDL。我宁愿不将它们硬编码到视图中,因为我使用 switch 语句来控制选择filter选项时发生的情况。所以想知道是否有一种简单的方法来实现这一点,而无需创建新的助手来纠正这种情况。

这是我到目前为止所拥有的(减去不必要的代码(:

public enum OrderFilter
{
  All,
  Live,
  InProgress,
  Invoiced,
  Outstanding
}
public ActionResult Index(OrderFilter? orderFilter)
{
  ViewBag.FilterOptions = orderFilter;
}
@Html.DropDownList("orderFilter", (IEnumerable<SelectListItem>)ViewBag.FilterOptions, "Filter Options")

如果我按照上面所做的那样操作,则响应是"没有类型为'IEnumerable<SelectListItem>'的 ViewData 项具有键'orderFilter'"。

我正在寻找类似于以下代码的内容,但没有使用自定义助手(如果可能(。

@Html.DropDownList("misc", (IEnumerable<SelectListItem>)ViewBag.Misc)
var users = _userRepository.GetData().Select(u => new SelectListItem
  {
    Value = u.Id.ToString(CultureInfo.InvariantCulture),
    Text = u.Details
  });
 ViewBag.Administrators = users;

将 ENUM 分配给下拉列表

在对此事进行广泛调查后,按照我想要的方式进行并不是一项简单的任务。因此,我添加了帮助程序类来处理下拉列表中的ENUM值。

我看过的一些示例将模型与 ENUM 帮助程序结合使用,但由于我不需要它,我发现下面的视频教程非常有用。下面的视频是我当前的实现,它按我的预期工作。

使用下拉列表绑定枚举类型第 1 部分

使用下拉列表绑定枚举类型第 2 部分

使用下拉列表绑定枚举类型第 3 部分