在控制器中填充模型,获得null引用

时间:2017-10-26 14:43:58

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

嗨,我遇到了问题,而我似乎无法解决问题。我想填充模型的一部分然后将其传递给视图,以便用户可以填充其余部分并提交。

这是模型

public class SelectModel
{
    public List<String> Scripts { get; set; }
    public string ScriptSelection { get; set; }
    public IFormFile InputFile { get; set; }

}

这是我试图在控制器中填充列表的地方

    public IActionResult Index()
    {
        SelectModel model = new SelectModel();

        model.Scripts.Add("Germany");

        return View(model);
    }

我在model.Scripts.Add(“Germany”);

获得了null引用异常

我已经从视图中填充了一个模型并将其传递回控制器,但我似乎在第一个视图中在控制器中初始化模型时遇到了问题

2 个答案:

答案 0 :(得分:3)

因为您在Add上调用NULL方法。 model.Scripts为NULL,因此您将获得经典&#34; 对象参考未设置为instanc e&#34;错误

在尝试添加之前将其初始化为空列表。

一种方法是使用默认构造函数,将Scripts属性初始化为空列表。

public class SelectModel
{
    public List<String> Scripts { get; set; }
    public string ScriptSelection { get; set; }
    public IFormFile InputFile { get; set; }

    public SelectModel()
    {
      this.Scripts =new List<string>();
    } 

}

另一个选择是在创建对象时将其初始化为空列表

var model = new SelectModel(){ Scripts =new List<string>() };
model.Scripts.Add("Germany");

您也可以使用object / collection initializator语法

var model = new SelectModel()
{
    Scripts = new List<string>()
    {
        "Germany", "USA"
    }
};

答案 1 :(得分:2)

您必须初始化列表。像

这样的东西
public class SelectModel
{
    public List<String> Scripts { get; set; } = new List<String>();
    public string ScriptSelection { get; set; }
    public IFormFile InputFile { get; set; }

} 

或在控制器动作

public IActionResult Index()
    {
        SelectModel model = new SelectModel();
        //initialization of the list Before usage
        model.Scripts = new List<String>();
        model.Scripts.Add("Germany");

        return View(model);
    }