2014-01-23 87 views
12
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」的選擇列表。 ID和名稱是該特定對象列表(mylist)的兩個屬性。 同樣,我需要將字典添加到選擇列表。 ** 需要將字典的關鍵字添加到「數據值」參數 - (「上面示例的ID位置」) 需要將字典的值添加到「數據文本」參數 - (「名稱」上面例子的位置)字典鍵值,以選擇列表

所以請告訴我一種方法來創建一個選擇列表使用這個字典鍵和值而不創建一個新的類。

回答

31

你可以嘗試:

SelectList SelectList = new SelectList((IEnumerable)dict, "Key", "Value", selectedValue); 

Dictionary<string, string>實現IEnumerable<KeyValuePair<string, string>>KeyValuePair給你KeyValue性能。

但請注意,通過枚舉Dictionary<string,string>返回的項目順序無法保證。如果你想有一個保證的順序,你可以這樣做:

SelectList SelectList = new SelectList(dict.OrderBy(x => x.Value), "Key", "Value", selectedValue); 
+0

簡短,直接和合理。傑出的答案! –

0

嘗試

SelectList SelectList = new SelectList((IEnumerable)mylist, "Key", "Value", selectedValue); 

2

您可以構建從字典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); 
8

你真正需要做的是把字典作爲參數,並使用過載:

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"); 

我知道這個職位是有點老,但我來到這裏找到答案,並根據以前給出的答案得出了這個結論。

0

我喜歡寫這樣的:

@Html.DropDownListFor(model => model.Delimiter, 
             new Dictionary<string, string> 
             { 
              {",", ", (Comma)"}, 
              { ";", "; (Semicolon)"} 
             }.Select(x => new SelectListItem {Value = x.Key, Text = x.Value})) 

因爲這樣一來,您就不必依靠串"Key""Value"