将String []转换为List <selectlist> </selectlist>

时间:2015-02-24 15:01:23

标签: c# asp.net

是否有一种简单的方法,无需手动循环遍历数组中的所有项目,从下拉菜单的字符串数组转换为SelectList?

4 个答案:

答案 0 :(得分:13)

我假设您需要SelectListList<SelectListTiem>,而不是List<SelectList>SelectLista constructor收集了一个集合:

string[] strings = new [] { .. strings .. };
SelectList sl = new SelectList(strings);

或者您可以投放到List<SelectListItem>

string[] strings = new [] { .. strings .. };
var sl = strings.Select(s => new SelectListItem {Value = s})
                .ToList();

请注意,SelectList实现了IEnumerable<SelectListItem>,因此,如果您拥有类型为IEnumerable<SelectListItem>的模型属性,则可以创建SelectList并将其分配给该属性,而不是投影到一个List<SelectListItem>。它的功能相同,但代码会更清晰。

答案 1 :(得分:6)

这一切都假设我们正在讨论MVC,而不是Web Forms

D Stanley的回答第二,另一个解决方案:

string[] strings = new [] { ... strings ... };
var selectListItems = strings.Select(x => new SelectListItem() { Text = x, Value = x, Selected = x == "item 1" });

SelectListItem列表也可用于填充MVC下拉列表。

使用此方法,您还可以在SelectListItem上设置其他属性,例如显示值。

我们无法使用Select构造函数在IQueryable上调用SelectListItem,因为LINQ会尝试将其转换为SQL。除非有提供者,否则这是不可能的,也不是我们想要实现的目标。

为了始终确保我们可以像上面所示进行枚举,我们需要强制EF或其他ORM来获取所有数据。我们可以通过使用ToList()调用Select 之前来执行此操作:

var selectListItems = strings.ToList().Select(x => new SelectListItem() { Text = x, Value = x, Selected = x == "item 1" });

正如@BCdotWEB所指出的那样:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

该列表将不可避免地被置于构造函数中。如果我能记得正确的话,剃刀视图应如下所示:

@Html.DropDownListFor(x => x.SelectedString, new SelectList(x.Strings, "Value", "Text"))

其中x.SelectedString是您希望从下拉列表中选择的值的位置。 x.Strings是我们在selectListItems / Controller

中创建的Service

答案 2 :(得分:0)

我假设您可以使用SelectList Constructor,因为它接受IEnumerable:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)

答案 3 :(得分:0)

如果您正在谈论asp.net webForms,您可以使用此代码

string[] stringArray= new []{"var1",...};
Dictionary<string,string> listItemSource=stringArray.ToDictionary(i => i, i =>i);
yourDropDownList.DataSource=listItemSource;
yourDropDownList.DataValueField = "value";
yourDropDownList.DataTextField = "key";
yourDropDownList.DataBind();