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

如何通过复选框分类筛选枪械产品数据?

如何根据选中的复选框分类筛选枪械产品?

需求:选中如“Pistols”这类复选框时,仅显示对应类别的枪械。以下是基于现有代码的修改方案:


1. 前端视图修改

先调整复选框的属性,让所有类别复选框使用统一的名称,方便后端接收选中的类别列表;同时将筛选控件包裹在表单中,和价格筛选一起提交。

修改后的视图代码:

<form asp-action="weapons" method="get">
    <!-- 价格筛选控件 -->
    <div>
        <label for="MinPrice">最低价格:</label>
        <input type="number" id="MinPrice" name="MinPrice" value="@ViewData["MinimumPrice"]" />
        <label for="MaxPrice">最高价格:</label>
        <input type="number" id="MaxPrice" name="MaxPrice" value="@ViewData["MaximumPrice"]" />
    </div>

    <!-- 类别复选框区域 -->
    <div style="background-color: #454545;">
        <ul class="category-ul">
            <li>
                <input type="checkbox" id="pistol" name="selectedCategories" value="Pistols" 
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("Pistols") ? "checked" : "")>
                <label for="pistol">Pistols</label>
            </li>
            <li>
                <input type="checkbox" id="smg" name="selectedCategories" value="SMGs"
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("SMGs") ? "checked" : "")>
                <label for="smg">SMGs</label>
            </li>
            <li>
                <input type="checkbox" id="rev" name="selectedCategories" value="Revolvers"
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("Revolvers") ? "checked" : "")>
                <label for="rev">Revolvers</label>
            </li>
            <li>
                <input type="checkbox" id="shotgun" name="selectedCategories" value="Shotguns"
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("Shotguns") ? "checked" : "")>
                <label for="shotgun">Shotguns</label>
            </li>
            <li>
                <input type="checkbox" id="assault" name="selectedCategories" value="AssaultRifles"
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("AssaultRifles") ? "checked" : "")>
                <label for="assault">Assault Rifles</label>
            </li>
            <li>
                <input type="checkbox" id="rifle" name="selectedCategories" value="Rifles"
                    @(ViewData["selectedCategories"] is List<string> cats && cats.Contains("Rifles") ? "checked" : "")>
                <label for="rifle">Rifles</label>
            </li>
        </ul>
    </div>
    <button type="submit">筛选</button>
</form>

核心调整:

  • 所有复选框统一使用name="selectedCategories",value设置为和Firearm模型中Category字段一致的内容;
  • 添加复选框状态回显逻辑,提交后保持选中状态;
  • 将所有筛选控件放入表单,通过GET请求提交参数。

2. 控制器修改

添加接收选中类别的参数,同时新增类别筛选逻辑:

修改后的控制器代码:

public async Task<IActionResult> weapons(decimal MinPrice, decimal MaxPrice, List<string> selectedCategories)
{
    var firearms = from s in _context.Firearm
                    select s;

    var max = firearms.Max(i => i.Price);
    // 处理MaxPrice默认值:仅当未传入有效值时设为最大值
    if (MaxPrice == 0)
    {
        MaxPrice = max;
    }

    ViewData["MinimumPrice"] = MinPrice;
    ViewData["MaximumPrice"] = MaxPrice;
    ViewData["Maximum"] = max;
    // 保存选中的类别用于视图回显
    ViewData["selectedCategories"] = selectedCategories;

    // 价格筛选
    if (MinPrice > 0 || MaxPrice < max)
    {
        firearms = firearms.Where(s => s.Price >= MinPrice && s.Price <= MaxPrice);
    }

    // 类别筛选:有选中项时才过滤
    if (selectedCategories != null && selectedCategories.Any())
    {
        firearms = firearms.Where(s => selectedCategories.Contains(s.Category));
    }

    return View(await firearms.AsNoTracking().ToListAsync());
}

核心调整:

  • 新增List<string> selectedCategories参数接收前端提交的选中类别;
  • 添加类别筛选逻辑:当有选中的类别时,仅保留对应分类的枪械;
  • 修复原代码中MaxPrice强制赋值的问题,优化价格筛选的边界判断;
  • 存入选中类别到ViewData,用于视图的复选框状态回显。

3. 模型说明

现有Firearm模型中的Category字段完全符合需求,只需确保数据库中该字段的值和复选框的value完全匹配(如“Pistols”“SMGs”等)即可,无需额外修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:15:31