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

Asp.Net Core实现分类名称与商品展示,解决分类名重复循环问题

解决分类标题重复显示问题

方案一:直接在视图中获取分类名称(简单快捷)

因为当前查询的是同一个分类下的所有商品,所有商品的分类信息完全一致,无需循环遍历,直接取列表中第一个商品的分类名称即可:

修改商品展示视图代码:

<!-- 仅显示一次分类名称 -->
@if (Model.Any())
{
    <h1>@Model.First().Categories.CategoriesName</h1>
}

<div class="card_contanier">
    @foreach (var item in Model)
    {
        <div class="card">
            <img class="bg_img_card" src="~/img/site_img/Header_1.jpg" alt="">
            <img src="~/Uploads/Products/@item.Image" alt="" class="img_card">
            <h4 class="crad_mian_title">@item.Product_Name</h4>
            <p class="card_title">@item.Description</p>
            <div class="cards_description">
                <h6>@item.Price ريال</h6>
                <a href="">اطلبه الان</a>
            </div>
        </div>
    }
</div>

注:用Model.Any()判断列表是否有数据,避免空列表时调用First()引发报错。

方案二:优化控制器,单独传递分类信息(更规范)

若希望视图逻辑更清晰,可在控制器中单独获取分类信息,通过ViewData传递给视图:

1. 更新控制器代码

public async Task<IActionResult> Categries(int id)
{
    // 获取目标分类信息
    var category = await _db.Categories.FindAsync(id);
    // 获取该分类下的所有商品
    var products = await _db.Products.Include(s => s.Categories)
                                     .Where(X => X.CategoriesId == id)
                                     .ToListAsync();
    // 将分类名称存入ViewData
    ViewData["CategoryName"] = category?.CategoriesName;
    
    return View(products);
}

2. 修改商品展示视图代码

<!-- 从ViewData中读取分类名称,仅显示一次 -->
@if (!string.IsNullOrEmpty(ViewData["CategoryName"]?.ToString()))
{
    <h1>@ViewData["CategoryName"]</h1>
}

<div class="card_contanier">
    @foreach (var item in Model)
    {
        <div class="card">
            <img class="bg_img_card" src="~/img/site_img/Header_1.jpg" alt="">
            <img src="~/Uploads/Products/@item.Image" alt="" class="img_card">
            <h4 class="crad_mian_title">@item.Product_Name</h4>
            <p class="card_title">@item.Description</p>
            <div class="cards_description">
                <h6>@item.Price ريال</h6>
                <a href="">اطلبه الان</a>
            </div>
        </div>
    }
</div>

注:此方式将分类信息的获取逻辑放在控制器中,视图仅负责展示,更贴合MVC职责分离的设计原则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:10:25