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

ASP.NET jQuery基于JSON实现级联下拉食物卡路里查询

食物卡路里级联下拉查询功能修复实现方案

核心故障点为ASP.NET WebForm服务器控件默认渲染ID与jQuery选择器写死的ID不匹配,按以下步骤修改即可实现全部需求:

  • 第一步:修正前端控件ID配置
    ASP.NET WebForm带runat="server"标记的控件默认会自动拼接父容器前缀生成渲染ID,必须给所有需要JS操作的控件加ClientIDMode="Static"属性固定ID,从根源解决ID绑定不匹配问题,页面结构参考如下:
<!-- 食物分组一级下拉框 -->
<asp:DropDownList ID="ddlFoodGroup" runat="server" ClientIDMode="Static">
    <asp:ListItem Value="">请选择食物分组</asp:ListItem>
    <asp:ListItem Value="Dairy and Egg Products">Dairy and Egg Products(乳蛋制品)</asp:ListItem>
    <asp:ListItem Value="Fats and Oils">Fats and Oils(油脂)</asp:ListItem>
</asp:DropDownList>

<!-- 食物明细二级下拉框 -->
<asp:DropDownList ID="ddlFoodItem" runat="server" ClientIDMode="Static" Enabled="false">
    <asp:ListItem Value="">请先选择食物分组</asp:ListItem>
</asp:DropDownList>

<asp:Button ID="btnCalculate" runat="server" Text="Calculate" ClientIDMode="Static" OnClientClick="return false;" />
<div id="calorieResult"></div>
  • 第二步:修正jQuery级联交互逻辑
    确保所有选择器使用和控件一致的固定ID,通过$.getJSON读取cons.json后按分组过滤数据,动态加载二级选项,按钮点击时直接读取选项绑定的卡路里值即可:
$(function() {
    // 一级分组切换事件
    $('#ddlFoodGroup').on('change', function() {
        const currentGroup = $(this).val();
        const $foodSelect = $('#ddlFoodItem');
        const $resultBox = $('#calorieResult');
        
        $foodSelect.empty().append('<option value="">加载中...</option>').prop('disabled', true);
        $resultBox.empty();

        if (!currentGroup) {
            $foodSelect.html('<option value="">请先选择食物分组</option>');
            return;
        }

        $.getJSON('cons.json', function(foodData) {
            $foodSelect.empty().append('<option value="">请选择具体食物</option>');
            // 过滤当前分组下的所有食物
            const matchedFoods = foodData.filter(item => item.group === currentGroup);
            // 追加选项时直接把卡路里存在value属性,减少后续查询逻辑
            matchedFoods.forEach(food => {
                $foodSelect.append(`<option value="${food.calorie}">${food.name}</option>`);
            });
            $foodSelect.prop('disabled', false);
        }).fail(() => {
            $foodSelect.html('<option value="">数据加载失败,请刷新重试</option>');
        });
    });

    // Calculate按钮查询事件
    $('#btnCalculate').on('click', function() {
        const calorieVal = $('#ddlFoodItem').val();
        const foodName = $('#ddlFoodItem option:selected').text();
        const $resultBox = $('#calorieResult');

        if (!calorieVal) {
            $resultBox.html('*请先选择具体食物后再查询*');
            return;
        }
        // 渲染查询结果
        $resultBox.html(`> 选中食物:${foodName}<br>卡路里含量:*${calorieVal} kcal*`);
    });
});
  • 第三步:匹配cons.json数据结构
    确保JSON文件结构和JS读取逻辑一致,参考格式如下:
[
    {
        "group": "Dairy and Egg Products",
        "name": "Cheese, parmesan, low sodium(低钠帕玛森奶酪)",
        "calorie": 451
    },
    {
        "group": "Dairy and Egg Products",
        "name": "Cheese, cheddar(切达奶酪)",
        "calorie": 402
    },
    {
        "group": "Fats and Oils",
        "name": "Olive oil(橄榄油)",
        "calorie": 884
    }
]

验证说明

将cons.json放在页面可访问的站点路径下,部署后选择「Dairy and Egg Products(乳蛋制品)」分组,二级下拉框会自动加载该分类下所有食物;选中「Cheese, parmesan, low sodium(低钠帕玛森奶酪)」后点击Calculate按钮,即可正确展示卡路里值451。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:27:15