当从控制器ASP MVC中调用类中的内部void函数时,为空引用

本文关键字:void 函数 引用 内部 控制器 ASP MVC 调用 | 更新日期: 2023-09-27 18:05:45

我正在寻找一个救世主来解决我的问题。

我正在尝试遵循这个教程关于嵌套集合:

MVC中的嵌套集合添加多个电话号码

然而,我遇到了一个问题:

internal void CreatePart(int count = 1)
    {
        for (int i = 0; i < count; i++)
        {
            Parts.Add(new Part()); // ====>>>>>> it throws null reference
        }
    }

我找不到null的来源。你能帮我找一下吗?

下面是我的代码:

产品实体

public class Product
{
    public int Id { get; set; }
    [StringLength(50, MinimumLength = 2)]
    public string Name { get; set; }
    public virtual ICollection<Part> Parts { get; set; }
    public virtual ICollection<Version> Versions { get; set; }
    internal void CreatePart(int count = 1)
    {
        for (int i = 0; i < count; i++)
        {
            Parts.Add(new Part());
        }
    }
}

部件实体

public class Part
{
    public int Id { get; set; }
    [StringLength(50, MinimumLength = 2)]
    public string Name { get; set; }
    public int ProductId { get; set; }
    public virtual Product Product { get; set; }
    public string DeletePart { get; set; }
}

创建控制器:

public ActionResult Create()
    {
        var product = new Product();
        product.CreatePart(2);
        return View(product);
    }

当从控制器ASP MVC中调用类中的内部void函数时,为空引用

您还没有实际实例化Parts,所以当您试图向其添加元素时,您会得到一个异常。

如果你看看你链接到的例子,你在Product类中缺少一个构造函数。

试着把这个添加到你的类中:

public Product()
{
    this.Parts = new HashSet<Part>();
}

不完全确定,但是!

改变:

for (int i = 0; i < count; i++)
{
   Parts.Add(new Part());
}

:

for (int i = 0; i < count; i++)
{
   Part p = new Part(); 
   Parts.Add(p);
}

如果错误现在移动到:

Part p = new Part(); <<

那么我猜问题是如何初始化的。

您可以尝试为Part类定义一个构造函数并给它虚拟值,看看会发生什么。