【问题标题】:Sql select statement returns Null reference error in asp.netsql select语句在asp.net中返回空引用错误
【发布时间】:2020-03-04 05:42:31
【问题描述】:

我正在视图中查看特定类别的项目。我希望它在单击时查看该类别下的所有产品,但我得到一个空引用异常。我对类别和产品有单独的表格。

这是我尝试过的。 查看代码:

@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。我现在想不通的是为什么参数没有从我上面的代码中得到。请帮忙,我是这个框架的新手。

【问题讨论】:

  • 失败的SQL语句在哪里?
  • int catId = categoryDTO.Id;
  • db.Categories.Where(x =&gt; x.Slug == name) 不能有任何满足该条件的CategoryDTO
  • 您得到一个空引用异常,因为设置categoryDTO 变量的前一行以FirstOrDefault 结尾。该查询没有找到任何结果,因此它为变量分配了该类型的默认值(null)。当您尝试访问空对象的属性时,您会遇到该异常。
  • @Davidire 并且在 Slug 列中有一行具有 name 引用的值?

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


【解决方案1】:

您尝试发送“productVMList”以查看,但您将 categoryVM 模型添加到 html 页面。我认为您应该发送“categoryVMList”而不是“productVMList”,或者您应该将productVM 添加到您的视图中。喜欢;

@model IEnumerable&lt;OpabidFarmsLtd.Models.ViewModels.Shop.ProductVM&gt;

您还应该使用 .Add 将新项目添加到列表中。例如,

ProductVMList.Add(object)

否则,将断点置于return View(ProductVMList) 并检查列表为空或填充。

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2022-01-03
    • 2012-01-01
    • 2012-07-27
    • 2012-07-07
    相关资源
    最近更新 更多