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

.NET Core 8 MVC项目点击分类后产品列表数据为空问题

问题排查与修复方案

核心问题分析

你的控制器代码存在逻辑错误:当前查询是根据blogPosts.Id等于传入的分类ID来获取文章,这完全不符合需求——我们需要的是获取属于该分类下的所有博客文章,而不是ID等于分类ID的单篇文章。此外,你返回的是单个blogPost对象,但视图接收的是CategoryViewModel,类型不匹配,这直接导致视图中Model.BlogPost没有数据。

分步修复

1. 修正控制器逻辑

修改Category方法,查询分类ID匹配的所有博客文章,并支持分页(适配视图中的分页组件):

[Route("cat/{title}-C{id}")]
public async Task<IActionResult> Category(long id, int page = 1)
{
    // 每页显示的文章数量,可按需调整
    const int pageSize = 10;

    // 查询属于当前分类的所有博客文章,包含关联数据
    var blogPostsQuery = _db.blogPosts
        .Where(x => x.CategoryId == id) // 关键:匹配文章的分类ID,而非文章自身ID
        .Include(x => x.Category)
        .Include(x => x.Author)
        .Include(x => x.PostImages)
        .OrderByDescending(x => x.CreatedDate); // 按创建时间倒序,可选配置

    // 分页处理
    var pagedBlogPosts = await blogPostsQuery.ToPagedListAsync(page, pageSize);

    // 构建视图模型,传递分类信息和分页后的文章列表
    var viewModel = new CategoryViewModel
    {
        Category = await _db.Categories.FirstOrDefaultAsync(c => c.Id == id),
        BlogPost = pagedBlogPosts
    };

    return View(viewModel);
}

2. 修正URL生成代码

你当前使用的BlogSeoUrl生成的是单篇博客的URL,分类页面需要调用CategorySeoUrl生成正确的分类跳转链接:

@Common.Extensions.CategorySeoUrl(Model.Category)

3. 验证视图模型匹配

确保CategoryViewModel的定义包含以下核心属性:

public class CategoryViewModel
{
    public Category Category { get; set; }
    public IPagedList<BlogPost> BlogPost { get; set; }
}

额外检查点

  • 确认BlogPost实体类中存在CategoryId属性,且与Category实体正确建立外键关联。
  • 检查数据库中是否有博客文章的CategoryId与你点击的分类ID匹配的数据。
  • 统一路由参数与控制器参数的命名:路由中是{id},控制器参数建议改为小写id(.NET路由大小写不敏感,但统一命名可避免潜在问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:28:13