将我的List <int>转换为List <selectlistitem>

时间:2015-11-12 08:41:11

标签: c# asp.net-mvc

我有一个DropDownList包含十年(从2010年到2020年)的范围,如下所示:

var YearList = new List<int>(Enumerable.Range(DateTime.Now.Year - 5, ((DateTime.Now.Year + 3) - 2008) + 1));
ViewBag.YearList = YearList;

但是这是我的问题,我希望选择默认值并在我提交我的信息时保留此值,并希望使用List<SelectListItem>类型,因为它更实用。

一旦进入这种类型,我只会这样做以保持选定的值:

foreach (SelectListItem item in list)
            if (item.Value == str)
                item.Selected = true;

如何将List<int>转换为List<SelectListItem>

3 个答案:

答案 0 :(得分:11)

尝试使用Linq转换它:

List<SelectListItem> item = YearList.ConvertAll(a =>
                {
                    return new SelectListItem()
                    {
                        Text = a.ToString(),
                        Value = a.ToString(),
                        Selected = false
                    };
                });

然后该项将是SelectListItem的列表

答案 1 :(得分:7)

您可以使用LINQ将项目从List<int>转换为List<SelectListItem>,如下所示:

var items = list.Select(year => new SelectListItem
{
    Text = year.ToString(),
    Value = year.ToString()
});

答案 2 :(得分:4)

现在有一种更干净的方法可以做到这一点:

SelectList yearSelectList = new SelectList(YearList, "Id", "Description"); 

Id是列表项的值的名称,Description是文本。如果愿意,可以在此之后添加参数以指定所选项目。您要做的全部传递给您希望转换为选择列表的ICollection!

在您看来,您可以这样做:

@Html.DropDownListFor(m => m.YearListItemId,
                        yearSelectList as SelectList, "-- Select Year --",
                        new { id = "YearListItem", @class= "form-control", @name= 
"YearListItem" })