值不能为空.参数名称:将对象添加到IEnumerable列表时的源

Ank*_*tal 0 .net c# ienumerable asp.net-mvc-4

我正在构建一个简单的MVC应用程序来执行CRUD应用程序.我有两个简单的模型类.

public class MoniModel
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }

}

public class MoniGridModel
{
    public IEnumerable<MoniModel> MoniDetails { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我试图执行以下操作:

public ActionResult MoniDetails()
    {
        MoniModel mim = new MoniModel();
        MoniGridModel migm = new MoniGridModel();

        mim.CategoryId = 1;
        mim.CategoryName = "a";
        mim.ProductId = 1;
        mim.ProductName = "b";

        migm.MoniDetails.ToList().Add(mim);

        return View(migm);
    }
Run Code Online (Sandbox Code Playgroud)

当migm.MoniDetails.ToList().Add(mim); 执行时,它会给出上述错误.我无法弄清楚为什么会这样.我正在为mim对象的每个成员赋值.下面是错误细节,但不确定这是否有帮助. 在此输入图像描述

And*_*ker 5

你从来没有实例化MoniDetails(它的价值在于null你创造的时候MoniGridModel):

public ActionResult MoniDetails()
{
    MoniModel mim = new MoniModel();
    MoniGridModel migm = new MoniGridModel();

    mim.CategoryId = 1;
    mim.CategoryName = "a";
    mim.ProductId = 1;
    mim.ProductName = "b";

    var details = new List<MoniModel>();
    details.Add(mim);

    migm.MoniDetails = details;

    return View(migm);
}
Run Code Online (Sandbox Code Playgroud)

正如@ David的答案指出的那样,尽管如此,最好让MoniGridModel班级来处理IEnumerable<MoniModel>.

除了他提供的选项之外,您还可以创建一个私有成员,IEnumerable<MoniModel>通过您当前拥有的getter 来支持和公开它:

public class MoniGridModel
{
    private List<MoniModel> moniDetails;

    public MoniGridModel()
    {
        this.moniDetails = new List<MoniModel>();
    }

    public IEnumerable<MoniModel> MoniDetails
    {
        get { return this.moniDetails; }
    }

    public void AddDetail(moniDetail detail)
    {
        this.moniDetails.Add(detail);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后AddDetail从你的控制器动作调用:

public ActionResult MoniDetails()
{
    MoniModel mim = new MoniModel();
    MoniGridModel migm = new MoniGridModel();

    mim.CategoryId = 1;
    mim.CategoryName = "a";
    mim.ProductId = 1;
    mim.ProductName = "b";

    migm.AddDetail(mim);

    return View(migm);
}
Run Code Online (Sandbox Code Playgroud)