Sql select 语句 returns asp.net 中的空引用错误
Sql select statement returns Null reference error in asp.net
我正在视图中查看特定类别的项目。我希望它在单击时查看该类别下的所有产品,但出现空引用异常。我有单独的类别和产品表。
这是我试过的。
查看代码:
@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.CategoryVM>
<h3>Categories</h3>
<ul>
<li><a href="#">All</a></li>
@foreach (var item in Model)
{
<li><a href="/shop/category/@item.Slug.ToLower()">@item.Name</a></li>
}
</ul>
我的控制器(ShopController):
public ActionResult Category(string name)
{
// Declare a list of ProductVM
List<ProductVM> productVMList;
using (Db db = new Db())
{
// Get category id
CategoryDTO categoryDTO = db.Categories.Where(x => x.Slug == name).FirstOrDefault();
int catId = categoryDTO.Id;
// Init the list
productVMList = db.Procucts.ToArray().Where(x => x.CategoryId == catId).Select(x => new ProductVM(x))
.ToList();
// Get category name
var productCat = db.Procucts.Where(x => x.CategoryId == catId).FirstOrDefault();
ViewBag.CategoryName = productCat.CategoryName;
}
// Return view with list
return View(productVMList);
}
Error Message Screenshot
编辑:
在寻找错误的过程中,我发现方法Category根本没有获取到参数,我将其中的所有代码注释掉并这样做:
public ActionResult Category(string name)
{
string cat;
using (Db db = new Db())
{
CategoryDTO dto = db.Categories.Where(x => x.Slug == "test-category").FirstOrDefault();
cat = dto.Id.ToString();
}
return Content(name + cat);
}
它只返回了8,这是数据库中的Id。我知道为什么它给我 null,这是因为它从未收到任何参数然后默认为 null。我现在不明白的是为什么参数没有从我上面的代码到达那里。请帮忙,我是这个框架的新手。
您尝试发送 "productVMList" 进行查看,但您将 categoryVM 模型添加到 html 页面。我认为您应该发送 "categoryVMList" 而不是 "productVMList" 或者您应该将 productVM 添加到您的视图中。喜欢;
@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.ProductVM>
您还应该使用 .Add 将新项目添加到列表中。例如,
ProductVMList.Add(object)
否则,将断点置于 return View(ProductVMList)
并检查列表是否为空或已填充。
我正在视图中查看特定类别的项目。我希望它在单击时查看该类别下的所有产品,但出现空引用异常。我有单独的类别和产品表。
这是我试过的。 查看代码:
@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.CategoryVM>
<h3>Categories</h3>
<ul>
<li><a href="#">All</a></li>
@foreach (var item in Model)
{
<li><a href="/shop/category/@item.Slug.ToLower()">@item.Name</a></li>
}
</ul>
我的控制器(ShopController):
public ActionResult Category(string name)
{
// Declare a list of ProductVM
List<ProductVM> productVMList;
using (Db db = new Db())
{
// Get category id
CategoryDTO categoryDTO = db.Categories.Where(x => x.Slug == name).FirstOrDefault();
int catId = categoryDTO.Id;
// Init the list
productVMList = db.Procucts.ToArray().Where(x => x.CategoryId == catId).Select(x => new ProductVM(x))
.ToList();
// Get category name
var productCat = db.Procucts.Where(x => x.CategoryId == catId).FirstOrDefault();
ViewBag.CategoryName = productCat.CategoryName;
}
// Return view with list
return View(productVMList);
}
Error Message Screenshot
编辑: 在寻找错误的过程中,我发现方法Category根本没有获取到参数,我将其中的所有代码注释掉并这样做:
public ActionResult Category(string name)
{
string cat;
using (Db db = new Db())
{
CategoryDTO dto = db.Categories.Where(x => x.Slug == "test-category").FirstOrDefault();
cat = dto.Id.ToString();
}
return Content(name + cat);
}
它只返回了8,这是数据库中的Id。我知道为什么它给我 null,这是因为它从未收到任何参数然后默认为 null。我现在不明白的是为什么参数没有从我上面的代码到达那里。请帮忙,我是这个框架的新手。
您尝试发送 "productVMList" 进行查看,但您将 categoryVM 模型添加到 html 页面。我认为您应该发送 "categoryVMList" 而不是 "productVMList" 或者您应该将 productVM 添加到您的视图中。喜欢;
@model IEnumerable<OpabidFarmsLtd.Models.ViewModels.Shop.ProductVM>
您还应该使用 .Add 将新项目添加到列表中。例如,
ProductVMList.Add(object)
否则,将断点置于 return View(ProductVMList)
并检查列表是否为空或已填充。