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

如何在ASP.NET MVC中通过JSON同时向视图传递两个数组?

解决方案:同时返回两个数组用于Chart.js渲染

没问题,这个需求很好实现——你只需要把product和quant两个数组打包成一个统一的对象返回,而非单独返回某一个数组。JSON支持传递复杂对象,所以这完全可行,下面是具体修改步骤:

1. 修改控制器代码,返回包含两个数组的对象

原来的控制器只返回了product数组,现在我们把两个数组封装到一个匿名对象中,这样前端就能一次性拿到所有需要的数据:

public ActionResult DoChart(string data) { 
    string[] product = {"Bread", "Milk", "Eggs", "Butter"}; 
    int[] quant = {10, 20, 30, 40}; 

    // 将两个数组包装到一个匿名对象里,属性名可以自定义,保持前后端一致即可
    var chartResponse = new {
        Labels = product,
        DataValues = quant
    };

    return Json(chartResponse, JsonRequestBehavior.AllowGet); 
}

2. 调整前端JavaScript,解析返回的对象

在AJAX的success回调里,我们现在接收的是一个包含两个数组的对象,直接通过对象的属性就能分别获取标签和数据值,然后传入Chart.js的配置中:

<script> 
$(() => { 
    $("form#chartForm").on("submit", (e) => { 
        e.preventDefault(); 
        let obj = { quantity: $("#quantity").val() }; 
        $.ajax({ 
            url: "@Url.Action("DoChart")", 
            method: "GET", 
            data: { data: JSON.stringify(obj) }, 
            success: (response, status) => { 
                // 现在response包含Labels和DataValues两个数组
                console.log("Labels:", response.Labels);
                console.log("Data:", response.DataValues);
                
                var ctx = document.getElementById('myChart').getContext('2d'); 
                var myChart = new Chart(ctx, { 
                    type: 'bar', 
                    data: { 
                        labels: response.Labels, // 使用返回的标签数组
                        datasets: [{ 
                            label: '# of Votes', 
                            data: response.DataValues, // 使用返回的数据值数组
                            borderWidth: 1 
                        }] 
                    }, 
                    options: { 
                        scales: { 
                            yAxes: [{ ticks: { beginAtZero: true } }] 
                        } 
                    } 
                }); 
            } 
        }); 
    }); 
}); 
</script>

额外说明

  • 如果你需要更规范的代码(比如大型项目),也可以创建一个强类型的DTO类(比如ChartDataDto)来封装这两个数组,效果和匿名对象一样,但可读性和可维护性更好:

    public class ChartDataDto
    {
        public string[] Labels { get; set; }
        public int[] DataValues { get; set; }
    }
    

    然后控制器返回new ChartDataDto { Labels = product, DataValues = quant }即可。

  • 确保前后端的属性名完全一致(比如控制器里的Labels对应前端的response.Labels),否则会出现取不到值的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:47:30