我有一个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 :(得分:2)
您的尝试很接近,但语法错误。您无法在列表初始化程序中执行for
循环。
基本上,你要做的是转换一个事物(键/值对)的集合到另一个事物的集合(SelectListItem
s)。您可以使用LINQ select:
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 })
)
答案 1 :(得分:0)
您无法将下拉列表绑定到词典 你需要标量属性来绑定选择值 你还需要一个集合来绑定下拉列表 你可以这样做,但那丑陋
@Html.DropDownList("SelectedItemValue", new SelectList(MyDictionary, "Key", "Value"))