在控制器中填充模型,获取空引用

Populating model in controller, getting nullreference

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

这是模型

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 上调用 Add 方法。 model.Scripts 为 NULL,因此您会收到经典的“对象引用未设置为实例e”错误

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

一种方法是使用默认构造函数,它将您的脚本 属性 初始化为一个空列表。

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 初始化器语法

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

您必须初始化列表。像

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);
    }