如何在子分类展示页面通过分类ID获取并展示分类名称
解决方案:通过分类ID获取并展示分类名称
控制器层处理
在对应Action中,通过传入的分类ID查询目标分类的名称,并存入ViewBag:
public ActionResult SubCategories(int id) { // 查询当前分类下的子分类列表 var subCategories = _dbContext.SubCategories.Where(sc => sc.CategoryId == id).ToList(); // 根据ID查询分类信息 var targetCategory = _dbContext.Categories.FirstOrDefault(c => c.Id == id); // 传递数据到视图 ViewBag.subCategories = subCategories; ViewBag.id = id; ViewBag.CategoryName = targetCategory?.Name; // 存入分类名称,空值时返回null return View(); }
视图层展示
在视图中直接从ViewBag读取分类名称,和已有的ID一起展示:
@{ List<SubCategory1> subCategories1 = (List<SubCategory1>)ViewBag.subCategories; int id = (int)ViewBag.id; // 处理空值,避免页面显示异常 string categoryName = ViewBag.CategoryName ?? "分类不存在"; } <!-- 顶部显示分类信息 --> <p>分类ID:@id</p> <p>分类名称:@categoryName</p> <!-- 子分类列表展示区域 --> @foreach(var subCat in subCategories1) { <div>@subCat.Name</div> }
关于你之前的尝试说明
你在实体中添加导航属性的思路是对的,但错误在于将整个分类列表存入ViewBag,而非根据ID查询单个分类。如果想通过实体关联优化查询,可在SubCategory实体中补充外键和导航属性:
public class SubCategory1 { public int Id { get; set; } public string Name { get; set; } public int CategoryId { get; set; } // 外键,关联Categories表的Id public virtual Category Category { get; set; } // 导航属性 }
但这种方式更适合需要在子分类列表中展示所属分类的场景,当前仅需顶部显示分类名称,直接查询单个分类的效率更高。
内容的提问来源于stack exchange,提问作者Tirzah
相关产品推荐
相关产品推荐

