NullReferenceException 未处理 asp.net entity framework

NullReferenceException was unhandled asp.net entity framework

我是 asp.net mvc 的新手,我正在为自己做这个练习。 我从 Northwind 数据库创建了一个 edmx。 我创建了一个控制器:

 public ActionResult Index(int id)
    {
        var model = new IndexViewModel();
        using (var db = new ProductDB())
        {
            model.Products = from p in db.Products
                             orderby p.ProductName

                             select new IndexViewModel.InfoProduct
                             {
                                 ProductName = p.ProductName,
                                 QuantityPerUnit = p.QuantityPerUnit,
                                 UnitPrice = p.UnitPrice
                             };
        }
        return View();
    }

...观点:

    @model aspTest.Models.IndexViewModel
@{
    Layout = null;
}

...

    <div> <ul>
        @foreach (var p in Model.Products){
    <li>@p.ProductName</li>
}
        </ul>
    </div>

...和视图模型:

public class IndexViewModel
{
    public IEnumerable<InfoProduct> Products { get; set; }

    public class InfoProduct
    {            
        public string ProductName { get; set; }
    }

}

但是这个错误一直出现在这个部分: @foreach (var p in Model.Products){

  • @p.ProductName
  • 抱歉,我知道这对你们中的大多数人来说可能不合适。

    您在模型中声明它将与 IndexViewModel class 一起工作,因为:

    @model aspTest.Models.IndexViewModel
    

    但是您没有从控制器向视图发送任何内容:

    return View();
    

    尝试使用:

    return View(model);
    

    错误是真实的,您正在尝试迭代您不了解的对象 (IndexViewModel) 的属性 (Products) '提供。

    除了您 return 没有 ViewModel 并大声使用 return View(model); 之外,您的代码还有其他可疑之处:

    public class InfoProduct
    {            
        public string ProductName { get; set; }
    }
    

    您的 class InfoProduct 仅包含产品名称,但您还在 select 子句中分配了数量和价格 属性,这不会编译。

    model.Products = from p in db.Products
                     orderby p.ProductName
                     select new IndexViewModel.InfoProduct
                     {
                          ProductName = p.ProductName,
                     };
    

    最后,使用 .ToList()

    实现您的数据
    public ActionResult Index(int id)
    {
        var model = new IndexViewModel();
        using (var db = new ProductDB())
        {
           model.Products = (from p in db.Products
                             orderby p.ProductName
                             select new IndexViewModel.InfoProduct
                             {
                                 ProductName = p.ProductName,
                             }).ToList();
           return View(model);
        }
    
    }