具有选定值的列表框

时间:2018-12-21 08:54:27

标签: c# asp.net-mvc razor listbox

我的ViewData中有IEnumerable<int>,其中包含年份数组,并且需要显示时已预先选择了当前年份,并且可以选择多个年份。好吧,什么可以更简单?

<select name="Years" multiple>
@foreach(int year in ViewData["Years"] as IEnumerable<int>)
{
<option value="@year" @if(year == DateTime.Now.Year){<text>selected="selected"</text>}>@year</option>
}
</select>

它按预期工作。
但是我们不是 n00bs ,我们知道预定义的帮助程序。

@Html.DropDownList("Years", (ViewData["Years"] as IEnumerable<int>).ToSelectListItems(DateTime.Now.Year/*it's our custom method, don't ask why*/), DateTime.Now.Year, new {multiple = "multiple"})

@Html.DropDownList("Years", new SelectList(ViewData["Years"] as IEnumerable<int>, null, null, DateTime.Now.Year), new { @class = "selectpicker", multiple = "multiple" })

绘制正确的列表框,但未选择任何项目(是的,我正在检查输出HTML和中间集合-选定的值集,而在HTML中什么也看不到)。

@Html.DropDownList("Years", "Noting selected", new SelectList(ViewData["Years"] as IEnumerable<int>, DateTime.Now.Year), new {multiple = "multiple"}) 
带有<< em>'HtmlHelper'的

失败,其中不包含'SelectListBox'的定义,并且找不到可访问的扩展方法'SelectListBox'接受类型为'HtmlHelper'的第一个参数(您是否缺少using指令或程序集参考?»

@Html.ListBox("Years", new MultSelectList(ViewData["Years"] as IEnumerable<int>, new int[]{DateTime.Now.Year}))

@Html.ListBox("Years", new MultSelectList(ViewData["Years"] as IEnumerable<int>, new int[] {DateTime.Now.Year}, new int[]{}))

甚至

@Html.ListBox("Years", new MultSelectList(ViewData["Years"] as IEnumerable<int>))
再次

绘制列表框,但现在选择了所有值。

所以我只有一个问题:为什么

INB4:DropDownListFor / ListBoxFor,在模型等中传递数据是不可接受的解决方案,因此请不要浪费字节在此处写入它们。 ViewData传递的集合正确无误,助手中存在问题(或我对它们的理解)。

0 个答案:

没有答案