从控制器ASP MVC调用类内部void函数时的Null引用

时间:2014-05-28 11:38:17

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

我正在为这个问题寻找救星。

我正在尝试按照本教程关于嵌套集合:

Nested collection in MVC add multiple phone number

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

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

2 个答案:

答案 0 :(得分:3)

您实际上没有实例化Parts,因此在尝试向其添加元素时会出现异常。

如果您查看链接到的示例,则错过了Product类中的构造函数。

尝试将此添加到您的班级:

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

答案 1 :(得分:0)

对此不完全确定,但是!

改变这个:

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();&lt;&lt;这里

然后我猜问题是它是如何初始化的。

你能尝试为Part类定义一个构造函数,并给它赋值,看看会发生什么。