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

ASP.NET MVC视图显示为空,模型无数据如何解决?

问题

在ASP.NET MVC项目中从数据库读取数据并在视图展示时,调试发现模型为空。此前同类项目可正常运行,无法定位当前代码问题,求解决方法。

相关代码

实体类

namespace Persons.Data
{
    public class Person
    {
        public int Id { get; get; }

        [Required]
        public string LastName { get; set; }

        [Required]
        public string FirstName { get; set; }
    }
}

DbContext

namespace Persons.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext([NotNullAttribute] DbContextOptions options) : base(options)
        {

        }

        public DbSet<Person> Persons { get; set; }
    }
}

控制器

namespace Persons.Controllers
{
    public class PeopleController : Controller
    {
        private readonly ApplicationDbContext _context;

        public PeopleController(ApplicationDbContext context)
        {
            _context = context;
        }

        // GET: People
        public async Task<IActionResult> Index()
        {
            return View(await _context.Persons.ToListAsync());
        }
    }
}

视图

@model IEnumerable<Persons.Data.Person>

@{
    ViewData["Title"] = "Index";
}

@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstName)
            </td>
        </tr>
}

排查与解决步骤

  • 修正实体类主键配置:Person类的Id属性写成了get; get;,这是明显错误,主键需要可设置,改为public int Id { get; set; }。EF Core依赖可写的主键属性映射数据库表,否则无法正确读取或写入数据。
  • 检查数据库数据:确认目标数据库的Persons表中是否存在记录,若本身无数据,模型自然为空。
  • 验证DbContext注入配置:
    • 在Program.cs(.NET 6+)或Startup.cs中,确认ApplicationDbContext的注册代码正确,示例:
      builder.Services.AddDbContext<ApplicationDbContext>(options =>
          options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
      
    • DbContext构造函数建议使用泛型的DbContextOptions<ApplicationDbContext>而非非泛型的DbContextOptions,避免注入匹配错误:
      public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
      {
      }
      
  • 调试控制器查询:在Index方法中添加断点,查看await _context.Persons.ToListAsync()的返回结果,确认是查询未获取到数据,还是模型传递到视图时出现异常。
  • 视图添加空值判断:为避免空引用异常,在视图中先判断模型是否为空再遍历:
    @if (Model != null)
    {
        foreach (var item in Model)
        {
            // 原有遍历代码
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:15:36