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);
}
}
我是 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){
抱歉,我知道这对你们中的大多数人来说可能不合适。
您在模型中声明它将与 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);
}
}