2015-06-12 61 views
0

我有一個dropdownlist,我想將我的Dictionary綁定到它,其中鍵是顯示的項目,值存儲在value屬性標記中。未知數量值的下拉列表

我發現這一點: bind-html-dropdownlist-with-static-items

但它不允許未知數量的項目被綁定,你必須手動輸入SelectListItem。我試過這個:

@Html.DropDownList("OverrideConfigList", new List<SelectListItem> 
{ 
    for(KeyValuePair<string, string> entry in Model.IdentifiFIConfiguration.Config.Configuration) 
    { 
     new SelectListItem { Text = entry.Key, Value = entry.Value} 
    } 
}) 

但是那也沒用。有什麼建議麼?

編輯: 我的模型類基本上是這樣的:

public class DefaultConfigurationModel 
{ 
    public IdentifiFIConfiguration IdentifiFIConfiguration { get; set; } 

    public String FiKeySelection { get; set; } 

    public List<String> FiConfigKeys 
    { 
     get 
     { 
      if (IdentifiFIConfiguration.Config == null) 
      { 
       return null; 
      } 

      List<string> fiConfigKeys = new List<string>(); 

      foreach (KeyValuePair<string, string> entry in IdentifiFIConfiguration.Config.Configuration) 
      { 
       fiConfigKeys.Add(entry.Key); 
      } 

      return fiConfigKeys; 
     } 
    } 
} 

IdentifiFIConfiguration持有Config看起來像這樣:

public class IdentifiConfiguration 
{ 
    public Dictionary<String, String> Configuration { get; set; } 

    public static IdentifiConfiguration DeserializeMapFromXML(string xml) 
    { 
     Dictionary<string, string> config = new Dictionary<string, string>(); 
     XmlDocument configDoc = new XmlDocument(); 
     configDoc.LoadXml(xml); 

     foreach (XmlNode node in configDoc.SelectNodes("/xml/*")) 
     { 
      config[node.Name] = node.InnerText; 
     } 

     IdentifiConfiguration identifiConfiguration = new IdentifiConfiguration() 
     { 
      Configuration = config 
     }; 

     return identifiConfiguration; 
    } 
} 
+0

模型類是什麼樣子? –

+0

@FahadJameel編輯模特 –

+0

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

2

你試圖接近,但語法是錯誤的。您不能像這樣在列表初始值設定項中執行for循環。

本質上,你試圖做的是轉換一個東西(鍵/值對)的集合到另一個東西的集合(SelectListItem s)。你可以這樣做與LINQ選擇:

Model.IdentifiFIConfiguration.Config.Configuration.Select(c => new SelectListItem { Text = c.Key, Value = c.Value }) 

您可以選擇需要在結尾處加上無論是靜態類型或兌現收集越早.ToList().ToArray(),但不會影響到邏輯聲明。

這種轉變將導致要SelectListItem是清單:

@Html.DropDownList(
    "OverrideConfigList", 
    Model.IdentifiFIConfiguration.Config.Configuration.Select(c => new SelectListItem { Text = c.Key, Value = c.Value }) 
) 
+0

我愛你,非常感謝你!這幫了我很多。 –

0

你不能一個下拉列表綁定到dictionnary 你需要標量屬性綁定選擇值 還需要一個集合綁定下拉列表 你可以做到這一點,但那個醜陋

@Html.DropDownList("SelectedItemValue", new SelectList(MyDictionary, "Key", "Value"))