ASP.NET Core 6 MVC:如何在Home视图展示Work模型数据
解决ASP.NET Core 6 MVC Home/Index视图NullReferenceException问题
问题原因
你在Home/Index视图中声明了IEnumerable<Website.Models.Work>类型的模型,但Home控制器的Index方法没有向视图传递该模型实例,导致视图里的Model为null,遍历的时候触发NullReferenceException。
解决方案
1. 更新Home控制器的Index方法
在Home控制器中注入数据上下文(或Work相关服务),查询最新4条Work数据并传递给视图:
using Microsoft.EntityFrameworkCore; using Website.Models; public class HomeController : Controller { private readonly YourDbContext _dbContext; // 替换成你的实际DbContext类名 public HomeController(YourDbContext dbContext) { _dbContext = dbContext; } public async Task<IActionResult> Index() { // 按创建时间倒序获取最新4条数据(替换CreatedAt为你的时间字段,或用Id自增字段) var latestWorks = await _dbContext.Works .OrderByDescending(w => w.CreatedAt) .Take(4) .ToListAsync(); return View(latestWorks); } }
2. 给视图添加空值判断(可选但推荐)
在视图中增加空值校验,避免无数据时再次报错:
@model IEnumerable<Website.Models.Work> @if (Model != null && Model.Any()) { foreach (var item in Model) { <div class="col-lg-3 col-sm-6"> <div class="gallery-item wow fadeInUp delay-0-2s"> <img src="~/assets/images/gallery/gallery-1.jpg" alt="Gallery"> <div class="gallery-content"> <span class="category"><a href="portfolio-details.html">@Html.DisplayFor(modelItem => item.Tag)</a></span> <h5><a href="portfolio-details.html">@Html.DisplayFor(modelItem => item.Headline)</a></h5> </div> </div> </div> } } else { <p>暂无作品展示</p> }
注意事项
- 确保
YourDbContext已在Program.cs中注册为服务:builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); - 替换代码中的
CreatedAt为你Work模型中用于排序的实际字段(比如发布时间、Id等)。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

