填充DropdownListFor()时的空对象引用

时间:2018-05-08 14:34:04

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

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;

错误。 NameCode是正确的(列表中的第一项),但它永远不会超出此第一项。我在某个地方错过了初始化吗?

我知道这个错误一般意味着什么,但是,我不明白为什么会发生错误。

3 个答案:

答案 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的构造函数中新建它。