You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC嵌套列表实现问题:按类别展示家具表单遇空引用异常

解决按类别分组展示家具数量表单的NullReferenceException问题

你遇到的核心问题是控制器代码没有正确为每个FurnitureList对象的Furniture属性赋值,导致视图访问Model.Furniture时触发空引用异常。咱们一步步来修正这个问题:

问题根源分析

看你当前的控制器代码,存在两个关键逻辑错误:

  1. 所有家具的QuantityList都被放到了全局的quantityListItems集合里,但没有和对应的类别FurnitureList建立关联
  2. 遍历每个家具项时,每次都新建FurnitureList但只设置了CategoryID,完全没给Furniture属性赋值,视图访问时自然会是空引用

修正后的控制器代码

public IActionResult Furniture(int id) 
{
    FurnitureViewModel model = new FurnitureViewModel();
    model.DeliveryID = id; // 补上原代码遗漏的DeliveryID赋值

    // 预加载类别及关联的家具,优化查询避免N+1问题
    var categories = context.FurnitureCategories
                            .Include(c => c.Furniture)
                            .ToList();

    var furnitureGroups = new List<FurnitureList>();

    foreach (var cat in categories)
    {
        // 为当前类别单独生成对应的QuantityList集合
        var categoryFurnitureQuantities = cat.Furniture.Select(item => new QuantityList
        {
            ID = item.ID,
            Name = item.Name,
            Quantity = 0
        }).ToList();

        // 创建完整的FurnitureList对象,关联类别与对应家具数量项
        furnitureGroups.Add(new FurnitureList
        {
            CategoryID = cat.ID,
            Furniture = categoryFurnitureQuantities // 关键:必须为Furniture属性赋值
        });
    }

    model.Categories = furnitureGroups;
    return View(model);
}

关键修改点说明

  • 预加载关联数据:用Include(c => c.Furniture)一次性加载类别和对应的家具,既简化代码又避免多次查询数据库
  • 按类别独立生成集合:每个类别单独创建自己的QuantityList集合,保证数据分组的正确性
  • 完整初始化FurnitureList:每个FurnitureList对象都明确赋值Furniture属性,从根源避免空引用
  • 补全DeliveryID赋值:原代码遗漏了model.DeliveryID的赋值,这里补上避免后续业务逻辑出现问题

视图层验证建议

确保你的FurnitureList.cshtml视图正确遍历Model.Furniture,示例代码如下:

@model YourNamespace.FurnitureList

<h3>类别ID:@Model.CategoryID</h3>
@foreach (var item in Model.Furniture)
{
    <div class="furniture-item">
        <label>@item.Name</label>
        <input type="number" asp-for="@item.Quantity" min="0" />
        <input type="hidden" asp-for="@item.ID" />
    </div>
}

这样修改后,每个类别分组都会正确加载对应的家具数量输入框,不会再触发空引用异常了。

内容的提问来源于stack exchange,提问作者user9633383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:39