我的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传递的集合正确无误,助手中存在问题(或我对它们的理解)。