在model
我有:
public List<SelectListItem> ItemList { get; set; }
在Controller
:
ViewModel model = new ViewModel();
list.ForEach(s => model.ItemList.Add(new SelectListItem() { Text = s.Name, Value = s.Code }));
列表是已填充的IEnumerable<T>
在列表中的第一项上我得到了
&#34;对象引用未设置为对象的实例。&#34;
错误。 Name
和Code
是正确的(列表中的第一项),但它永远不会超出此第一项。我在某个地方错过了初始化吗?
我知道这个错误一般意味着什么,但是,我不明白为什么会发生错误。
答案 0 :(得分:1)
在使用之前,您必须为List<SelectListItem>
属性初始化ItemList
类的新实例。只需将以下行添加到模型构造函数中:
this.ItemList = new List<SelectListItem>();
答案 1 :(得分:0)
因为您从未实例化过属性ItemList
。您可以在视图模型的无参数构造函数中执行此操作:
public class ViewModel
{
public List<SelectListItem> ItemList { get; set; }
public ViewModel()
{
ItemList = new List<SelectListItem>(); // note this
}
}
现在它应该按预期工作。
这里建议您使用SelectList
代替以下内容,使代码更简洁,更简单:
public SelectList ItemList { get; set; }
然后在你的代码中你可以做到:
model.ItemList = new SelectList(list,"Code","Name");
这将与您尝试的完全相同。
答案 2 :(得分:0)
我的猜测是ItemList为null。您正在新建ViewModel但不是ItemList。在新建ViewModel之后新建ItemList,或者在ViewModel的构造函数中新建它。