如何在没有硬编码属性的情况下在 MVC 中获取 select 列表

How can i get a select list in MVC without hardcoding properties

以下工作正常。问题是我不想硬编码 AvailabilityIDAvailabilityName

public ActionResult Create()
{
  SelectList AvailabilityList = new SelectList(db.Availabilities, "AvailabilityID", "AvailabilityName");
  ViewBag.AvailabilityList = AvailabilityList;
  return View();
}

风景来了

 @Html.DropDownListFor(model => model.Availability, (SelectList)ViewBag.AvailabilityList, new
                                {
                                    @class = "red",
                                    data_placeholder = "please choose"
                                })

我应该如何修改上面的代码? 我对 lambda 表达式有 99% 的把握,所以我也可以添加一个 order by 子句...但是另外 1% 呢?

谢谢

像这样的一点扩展(在静态 class 中)可以达到目的

public static IEnumerable<SelectListItem> ToSelectListItem<T, TValue, TText>(
            this IEnumerable<T> enumerable,
            Func<T, TText> text,
            Func<T, TValue> value,
            )
        {
            return enumerable.Select(item => new SelectListItem
            {
                Text = text(item).ToString(),
                Value = value(item).ToString(),
            }).AsEnumerable();

用法:

//you can add an OrderBy if needed
var AvailabilityList = db.Availabilities.ToList().ToSelectListItem(m => m.AvailabilityName, m => m.AvailabilityId);

当然,现在是 IEnumerable<SelectListItem>,不是 SelectList,但两者都可以与 DropDownListFor

一起使用