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

ASP.NET Core MVC项目Index.cshtml调用Model返回空异常且无数据如何解决

问题根因

  • 视图未声明强类型Model:你的Index.cshtml没有指定Model的类型,默认情况下Model会被初始化为null,不加判空就触发空引用异常。
  • 空集合类型不匹配:你当前foreach中??后使用的是Enumerable.Empty<string>(),而你的数据源是ProductInfo类型的集合,类型不匹配导致即使有数据也无法正常遍历渲染。
  • 可能存在的EF Core映射问题:DataContext中定义的DbSet<ProductInfo>名为Info,而Northwind数据库对应的商品表通常名为Products,如果没有手动指定表映射,EF Core会尝试查询不存在的Info表,导致返回空数据。
  • 可能未正确注册数据库上下文:如果未在项目启动配置中注册DataContext并配置正确的数据库连接字符串,会导致数据库查询失败返回null。

修复步骤

  1. 给视图添加强类型声明,在Index.cshtml最顶部添加以下代码:
@model IEnumerable<Northwind_API.Models.ProductInfo>
  1. 修正foreach的判空逻辑,修改为匹配的类型:
@foreach (var item in Model ?? Enumerable.Empty<ProductInfo>())
  1. 修正EF Core的表映射,两种方式二选一:
    • 方式一:修改DataContext中的DbSet命名和表名匹配:
    public DbSet<ProductInfo> Products { get; set; }
    
    控制器查询代码同步修改为return View(_context.Products.ToList());
    • 方式二:给ProductInfo类添加表名特性指定映射的表:
    [Table("Products")] // 替换为你实际的商品表名
    public class ProductInfo
    {
        // 原有属性不变
    }
    
  2. 确认启动配置中正确注册了数据库上下文,以.NET 6+的Program.cs为例:
builder.Services.AddDbContext<DataContext>(options => 
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

同时确认appsettings.json中的DefaultConnection连接字符串配置正确,能够正常连接到你的数据库。
5. 控制器层添加空值防护,避免返回null给视图:

public IActionResult Index()
{
    var productList = _context.Info?.ToList() ?? new List<ProductInfo>();
    return View(productList);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:04