Wil*_*Niu 7 asp.net-mvc selectlist selectlistitem html.dropdownlistfor drop-down-menu
我DropDownListFor用来在视图中呈现下拉列表.不知怎的,呈现的列表将不会选择SelectListItem与Selected设置为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"
});
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= Html.DropDownListFor(m => m.ListId,
Model.SelectList,
Model.OptionLabel,
new {@class="someClass"}) %>
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
Selected设置为只有一个且只有一个项目true.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"})
Run Code Online (Sandbox Code Playgroud)
有什么问题的建议吗?
编辑:
更多信息:
HTML.RenderActionDropDownListFor将始终选择列表框所用的值,因此在这种情况下,它将查看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"
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我在同一个模型上遇到了同样的问题(决定中的其他模型没问题)
不起作用:
@Html.DropDownListFor(o => o.Drivers.ValueListItems.Value, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })
Run Code Online (Sandbox Code Playgroud)
功能完美,所选元素:
@Html.DropDownListFor(o => o.Drivers.ValueListItems.ToDictionary(u=>u.Value).Values, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })
Run Code Online (Sandbox Code Playgroud)
尝试这样:
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"
});
Run Code Online (Sandbox Code Playgroud)
并在视图中:
<%= Html.DropDownListFor(
m => m.ListId,
new SelectList(Model.SelectList, "Value", "Text"),
Model.OptionLabel,
new { @class = "someClass" }
) %>
Run Code Online (Sandbox Code Playgroud)
可能还有一个问题:您正在尝试更改 POST 操作中选定的值。例如,您渲染了一个表单,用户在下拉列表中选择了某个值,提交了表单,并在 POST 操作中对此选定的值进行了一些处理,当您重新显示视图时,您希望下拉列表选择其他一些值。在这种情况下,您必须删除 ModelState 中包含的初始选择,否则 Html 助手将忽略模型中的选定值:
// do this before returning the view and only if your scenario
// corresponds to what I described above
ModelState.Remove("ListId");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8001 次 |
| 最近记录: |