【问题标题】:Set selected value of dropdown menu in ASP.Net MVC在 ASP.Net MVC 中设置下拉菜单的选定值
【发布时间】:2011-06-17 04:35:41
【问题描述】:

我有一个继承自 ViewModel 的 ASP.Net MVC 视图。 ViewModel 包含来自模型中两个实体的数据:

public PaginatedList<Entry> Entries { get; private set; }
public SelectList ColumnValues { get; private set; }

这两个属性用在基于列表模板的视图上。 该列表遍历条目列表并为每个条目显示一个表格行。在该行中的一个表格单元格中是一个 DropDownList,它由 ViewModel 的 ColumnValues 属性填充。

我可以使用以下方法让 DropDownList 设置它的选定项:

@Html.DropDownList("ColumnValue", Model.ColumnValues)

这会呈现页面,每一行在其中一个单元格中都有一个 DropDownList。但是,所选值始终设置为第一行的“ColumnValue”,并且对于所有行都是如此。

我将如何修改我的代码,以使 DropDownList 的选定值与每个单独条目的 ColumnValue 匹配。

目的是产生一种可编辑的数据网格,其中包含使用 AJAX 回发每行更改的链接。

【问题讨论】:

  • 总结一下。我正在尝试复制数据网格,在视图中使用 for each 循环。我看到有人提到这样做,但没有人发布示例。

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 viewmodel


【解决方案1】:

假设ViewData["ColumnValue"] = "5"。现在在您的ColumnValues 选择列表中,您需要有一个值为“5”的项目,它将自动被选中。例如:

ColumnValues = new SelectList(new[] {
    new SelectListItem { Value = "1", Text = "Item 1" },
    new SelectListItem { Value = "2", Text = "Item 2" },
    new SelectListItem { Value = "3", Text = "Item 3" }
}, "Value", "Text");

然后ViewData["ColumnValue"] = "2"会自动预选第二项。

【讨论】:

  • 我没有使用 ViewData[""] 方法。我使用的是 ViewModel,所以我有 Model.Entries 和 Model.ColumnValues。然后循环遍历作为 PaginatedList 的 Model.Entries 可枚举(从 List 继承)。问题是我需要视图中的选定项目对于每个循环的每次迭代都不同。所以它反映了该行数据中的值。
  • @Banford,如果您使用的是视图模型,为什么不使用强类型帮助器:Html.DropDownListFor(x =&gt; x.ColumnValue, Model.ColumnValues)?然后,您在控制器中所要做的就是将model.ColumnValue 设置为ColumnValues 集合中存在的某个值。
  • 切换到 DropDownListFor 用于填充框,但仍然没有选择值。我看不到在控制器中设置它的方法。所以我不得不在视图中构造 SelectList,在该点设置选定的值。
【解决方案2】:

在视图中使用 DropDownListFor() 并将 selectList 设置为以下工作:

new SelectList(Model.ColumnValues,"ColumnValue","ColumnValue", item.associatedField)

这似乎不是一个很好的做事方式,但它确实有效。这是现在最重要的事情。任何进一步的 cmet 将不胜感激。

【讨论】:

    【解决方案3】:

    您可以创建一个自定义 html 帮助程序,如我在 Set Class Attribute for certain records of Dropdownlist in MVC4 上的更新代码(更新代码 - 用于 MyDropdownListFor)中所示,并使用“Selected”属性作为 Class 属性。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2016-07-25
      • 2014-09-20
      • 2016-07-09
      • 2018-03-15
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多