c# - MVC3 将字典值传递给下拉列表并将关联的键绑定(bind)到模型

标签 c# asp.net-mvc asp.net-mvc-3

我正在尝试创建一个 mvc3 c# web 应用程序。我想要做的是创建一个 DropDownlist 并将字典传递给它。 Web 界面中的用户应该可以看到字典的值并且可以正常工作。但我不想将所选值绑定(bind)到模型,而是我想要关联的键。这有可能吗?

在示例中,您会看到我如何将所选值绑定(bind)到模型:

@Html.DropDownListFor(model => model.EditDate, new SelectList(Versions.Values), Model.EditDate)

Versions.Values 是 DateTimes(字典的值)。在提交时,选定的值绑定(bind)到 model.EditDate。但我想绑定(bind)所选值的关联键(值是 id)。

我该怎么做?

提前致谢

最佳答案

您需要转换 Dictionary<T1,T2>SelectList , 通常使用 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) },
};

然后你可以使用:

@Html.DropDownListFor(model => model.EditDate,
  Versions.Select(x => new SelectListItem {
    Text = x.Value.ToShortDateString(),
    Value = x.Key.ToString(),
    Selected = x.Value == Model.EditDate
  })
)

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

关于c# - MVC3 将字典值传递给下拉列表并将关联的键绑定(bind)到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062675/

相关文章:

javascript - 将带有单引号的字符串从 MVC Razor 传递到 JavaScript

c# - 使用 C# 的 ASP .NET MVC 3 自定义 Html 5 数据属性

c# - 根据 asp.net 中的哪个用户显示内容

c# - 使用 PromptDialog.Confirm 传递参数 :resume Bot Framework (C#)

javascript - 将服务器端 mvc 变量传递给 javascript

asp.net-mvc-3 - 第一页加载缓慢 - ASP.NET MVC

jquery - 使用 ajaxForm jQuery 插件时 IE 尝试下载 json 响应

c# - C#NEST ElasticSearch Default_Search分析器

c# - XmlAttributeCollection 无法从 xml 获取属性

c# - 如何将模型中的列表作为 ajax 调用的参数传递?