如何在没有硬编码属性的情况下在 MVC 中获取 select 列表
How can i get a select list in MVC without hardcoding properties
以下工作正常。问题是我不想硬编码 AvailabilityID
和 AvailabilityName
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
一起使用
以下工作正常。问题是我不想硬编码 AvailabilityID
和 AvailabilityName
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