C# MVC3将字典值传递给dropdownlist,并将关联键绑定到模型

C# MVC3将字典值传递给dropdownlist,并将关联键绑定到模型,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我正在尝试创建一个mvc3 c#Web应用程序。我想做的是创建一个DropDownlist并向它传递一个字典。webinterface中的用户应该可以看到字典的值,这是有效的。但是我不想将所选的值绑定到模型,而是想要关联的键。这有可能吗 在该示例中,您可以看到我如何将选定值绑定到模型: @Html.DropDownListFor(model => model.EditDate, new SelectList(Versions.Values), Model.EditDate) 值是日期时间

我正在尝试创建一个mvc3 c#Web应用程序。我想做的是创建一个DropDownlist并向它传递一个字典。webinterface中的用户应该可以看到字典的值,这是有效的。但是我不想将所选的值绑定到模型,而是想要关联的键。这有可能吗

在该示例中,您可以看到我如何将选定值绑定到模型:

@Html.DropDownListFor(model => model.EditDate, new SelectList(Versions.Values), Model.EditDate)
值是日期时间(字典的值)。提交时,所选值绑定到model.EditDate。但是我想绑定所选值的关联键(值是id)

我该怎么做


提前感谢

您需要将
字典
转换为
选择列表
,通常使用
Linq
扩展名之一完成。所以,如果你有:

Dictionary<Int32,DateTime> Versions = new Dictionary<Int32,DateTime> {
  { 1, new DateTime(2012, 12, 1) },
  { 2, new DateTime(2013, 1, 1) },
  { 3, new DateTime(2013, 2, 1) },
};

(假设
model.EditDate
是一个
int
,因为您现在将字典的
键设置为下拉列表的
值。)

谢谢,这是一个很好的输入。但是我仍然得到一个错误,因为EditDate类型是整数,而值类型是字符串。有什么错误吗?嗯,我还是不知道是什么。您是否可以显示
model.EditDate的数据类型和
值的分配示例?它正在工作!我只需要将x.Value==Model.EditDate更改为x.Key==Model.EditDate。非常感谢你!你有相反的结果:
字典
?不,它是字典。
@Html.DropDownListFor(model => model.EditDate,
  Versions.Select(x => new SelectListItem {
    Text = x.Value.ToShortDateString(),
    Value = x.Key.ToString(),
    Selected = x.Value == Model.EditDate
  })
)