7

我正在使用DropDownListFor在视图中呈现下拉列表。不知何故,呈现的列表没有选择SelectListItemwith Selectedset to true

在控制器动作中:

var selectList = sortedEntries.Select(entry => new SelectListItem
                            {
                                Selected = entry.Value.Equals(selectedValue),
                                Text = entry.Value,
                                Value = entry.Id
                            });

return View(new DropDownListModel
            {
                ListId = id,
                SelectList = selectList,
                OptionLabel = "Click to Select"
            });

在视图中:

<%= Html.DropDownListFor(m => m.ListId, 
    Model.SelectList, 
    Model.OptionLabel, 
    new {@class="someClass"}) %>

我尝试了以下方法:

  1. 确保只有一项Selected设置为true
  2. 删除选项标签参数。
  3. 删除 HTML 属性对象。
  4. 用于:SelectList_DropDownListFor

   Html.DropDownListFor(m => m.ListId, 
        new SelectList(Model.SelectList, "Value", "Text", 
             new List<SelectListItem>(Model.SelectList).Find(s => s.Selected)), 
        new {@class="someClass"})

关于出了什么问题的任何建议?

编辑

更多信息:

  • 这个动作是一个子动作,由另一个视图调用HTML.RenderAction
4

4 回答 4

6

DropDownListFor 将始终选择列表框的值,因此在这种情况下,它将查看 ListId 的值并选择列表中的该项目。如果列表中未找到 ListId,则将选择第一项(或默认文本)。如果您想要一个基于所选属性进行选择的列表,请使用 DropDownList(没有 For,在这种情况下您必须自己命名)。

因此,在您的情况下,这将起作用:

var selectList = sortedEntries.Select(entry => new SelectListItem
{
    Text = entry.Value,
    Value = entry.Id
});

return View(new DropDownListModel
{
    ListId = selectedValue,
    SelectList = selectList,
    OptionLabel = "Click to Select"
});
于 2011-07-14T10:30:07.557 回答
5

我在同一个模型上遇到了同样的问题(决定中的其他模型没问题)

不工作:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.Value, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })

完美运行,选择的元素:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.ToDictionary(u=>u.Value).Values, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })
于 2012-09-13T17:42:39.450 回答
4

试试这样:

var selectList = sortedEntries.Select(entry => new SelectListItem
{
    Text = entry.Value,
    Value = entry.Id
});

return View(new DropDownListModel
{
    // The drop down list is bound to ListId so simply set its value
    // to some element value in the list and it will get automatically
    // preselected
    ListId = selectedValue, 
    SelectList = selectList,
    OptionLabel = "Click to Select"
});

在视图中:

<%= Html.DropDownListFor(
    m => m.ListId, 
    new SelectList(Model.SelectList, "Value", "Text"), 
    Model.OptionLabel, 
    new { @class = "someClass" }
) %>

可能还有一个问题:您正在尝试更改 POST 操作中的选定值。例如,您呈现了一个表单,用户在下拉列表中选择了一些值,提交了表单,然后在您的 POST 操作中,您对这个选定的值进行了一些处理,当您重新显示视图时,您希望下拉列表选择一些其他值. 在这种情况下,您必须删除 ModelState 中包含的初始选择,否则 Html 助手将忽略模型中的选定值:

// do this before returning the view and only if your scenario
// corresponds to what I described above
ModelState.Remove("ListId");
于 2011-07-14T07:55:45.067 回答
0

这个问题的解决方案比我们都认为的更简单......

我们需要做的就是在视图模型上为下拉绑定到的元素设置属性 - 例如:ListId = 3

这样当我们这样做时

Html.DropDownListFor(m => m.ListId, 
    new SelectList(Model.SelectList, "Value", "Text", 
         new List<SelectListItem>(Model.SelectList).Find(s => s.Selected)), 
    new {@class="someClass"})

HtmlHelper 会自动选取默认值显示在 DropDownList

简单!

希望它可以帮助你和所有其他人 - 像我一样!- 已经浪费了很多时间来寻找这个明显问题的解决方案。

于 2014-07-01T10:00:03.847 回答