Dictionary<string,string> dict = new Dictionary<string,string>();
dict.add("a1", "Car");
dict.add("a2", "Van");
dict.add("a3", "Bus");
SelectList SelectList = new SelectList((IEnumerable)mylist, "ID", "Name", selectedValue);
在上面的代码中,我已将列表mylist
添加到SelectList
。 ID
和Name
是该特定对象list(mylist)
的两个属性。
同样,我需要将词典添加到SelectList.
需要将字典的键添加到data Value
参数 - (上例中的ID
位置)
需要将字典的值添加到data text
参数 - (上面示例的Name
位置)
因此,请告诉我一种使用此字典键和值创建选择列表的方法,而无需创建新类。
答案 0 :(得分:33)
你可以尝试:
SelectList SelectList = new SelectList((IEnumerable)dict, "Key", "Value", selectedValue);
Dictionary<string, string>
实施IEnumerable<KeyValuePair<string, string>>
,KeyValuePair
为您提供Key
和Value
属性。
但请注意,枚举Dictionary<string,string>
返回的项目顺序无法保证。如果您想要保证订单,您可以执行以下操作:
SelectList SelectList = new SelectList(dict.OrderBy(x => x.Value), "Key", "Value", selectedValue);
答案 1 :(得分:14)
您真正需要做的就是将字典作为参数传递并使用重载:
public SelectList(IEnumerable items, string dataValueField, string dataTextField);
示例:
var dictionary = new Dictionary<string, string>
{
{"a1", "Car"},
{"a2", "Van"},
{"a3", "Bus"}
};
var selectList = new SelectList(dictionary, "Key", "Value");
我知道这篇文章有点陈旧但是我来到这里找到了答案,并根据之前给出的答案得出了这个结论。
答案 2 :(得分:3)
您可以从Dictionary中构造一个SelectListItem对象列表,然后从中创建一个SelectList。
var dict = new Dictionary<string, string>
{
{"a1", "Car"},
{"a2", "Van"},
{"a3", "Bus"}
};
var myListItems = new List<SelectListItem>();
myListItems.AddRange(dict.Select(keyValuePair => new SelectListItem()
{
Value = keyValuePair.Key,
Text = keyValuePair.Value
}));
var myList = new SelectList(myListItems);
答案 3 :(得分:1)
我喜欢这样写:
@Html.DropDownListFor(model => model.Delimiter,
new Dictionary<string, string>
{
{",", ", (Comma)"},
{ ";", "; (Semicolon)"}
}.Select(x => new SelectListItem {Value = x.Key, Text = x.Value}))
因此,您不必依赖字符串"Key"
和"Value"
。
答案 4 :(得分:0)
尝试
SelectList SelectList = new SelectList((IEnumerable)mylist, "Key", "Value", selectedValue);
答案 5 :(得分:0)
我将其用于SelectListItem的列表,并且可以很好地用于选择标记和下拉列表
dict.OrderBy(x => x.Value).Select(r => new SelectListItem(r.Key, r.Value));