【发布时间】:2011-11-01 00:11:14
【问题描述】:
设置:
我已经使用 MvcScaffolding 搭建了一个控制器。
对于属性 Model.IdCurrencyFrom,脚手架创建了一个 Html.DropDownListFor:
@Html.DropDownListFor(model => model.IdCurrencyFrom,
((IEnumerable<FlatAdmin.Domain.Entities.Currency>)ViewBag.AllCurrencies).Select(option => new SelectListItem {
Text = (option == null ? "None" : option.CurrencyName),
Value = option.CurrencyId.ToString(),
Selected = (Model != null) && (option.CurrencyId == Model.IdCurrencyFrom)
}), "Choose...")
无论是新记录还是编辑现有记录,这都能正常工作。
问题:
只有 3 种货币,AR$、US$ 和 GB£。所以,我想要一个 ListBox,而不是下拉列表。
所以我把上面的改成:
@Html.ListBoxFor(model => model.IdCurrencyFrom,
((IEnumerable<FlatAdmin.Domain.Entities.Currency>)ViewBag.AllCurrencies).Select(option => new SelectListItem {
Text = (option == null ? "None" : option.CurrencyName),
Value = option.CurrencyId.ToString(),
Selected = (Model != null) && (option.CurrencyId == Model.IdCurrencyFrom)
}))
我现在得到一个 ArgumentNullException,参数名称:源,但仅在编辑现有记录时。创建新记录,这工作正常。
问题:
发生了什么?!
什么都没有改变。切换回 DropDownListFor 一切正常。切换到 ListBox(而不是 ListBoxFor),我得到了错误。
模型不为空(就像我说的,它与 DropDownListFor 配合得很好)...而且我的想法已经用完了。
【问题讨论】:
-
我注意到您没有检查
option == null是否在Value行上。这只是一个疏忽吗? -
您得到的错误是
ViewBag.AllCurrencies为空。我肯定会检查以确保它在您的操作方法中不为空。我知道你说它不是 null 但source参数指的是Select方法参数。 -
@BuildStarted:它不为空。如问题正文中所述,它适用于 DropDownListFor。相同的代码,相同的上下文。
-
@awrigley 你也可以发布你的模型的代码吗?您可以编辑问题并添加它。
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-scaffolding html.listboxfor