繁体   English   中英

如何使用Google Charts(Pie)在Asp.net MVC中将JSONresult数据显示为图表视图而不是数组

[英]How to display jsonresult data as a chart view and not an array in asp.net mvc using google charts (pie)

我试图显示基于特定查询的Google饼图,但得到的结果是:[[“状态”,“总进度”],[“已完成”,1],[“进行中”,2], [“ To-Do”,1]]应该为:

我的代码中预期的饼图场景如下:主管要查看选定的学生进度:控制器方法(我使用了本教程,但不包括“ id”因子): 链接到我使用的教程

控制器方法:

 public JsonResult AjaxMilestoneStatus(string id)
    {

        string query = $"SELECT Status, COUNT(Progress) AS TotalProgress from Milestone  
       Where StudentNumber = '{id}' GROUP BY Status";
        // string query = "SELECT Status, COUNT(Progress) AS TotalProgress from 
       Milestone GROUP BY Status ";

        string constr = 
         ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        List<object> chartData = new List<object>();
        chartData.Add(new object[]
                        {
                        "Status", "TotalProgress"
                        });
        using (var con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(query))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                con.Open();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        chartData.Add(new object[]
                        {
                        sdr["Status"], sdr["TotalProgress"]
                        });
                    }
                }

                con.Close();
            }
        }

        return Json(chartData, JsonRequestBehavior.AllowGet);
    }

然后视图如下所示:

enter code here

<!DOCTYPE HTML>
<html>
<head>
<script src="~/Scripts/jquery-3.3.1.js"></script>


</head>
<body>
<h1></h1>

@*<div id="chartContainer" style="height: 370px; width: 100%;"></div>*@
<script type="text/javascript" 
src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("visualization", "1", { packages: ["corechart"] });
    google.setOnLoadCallback(drawChart);
    function drawChart() {
         $.ajax({
            type: "Get",
             url: "/CHART/AjaxMilestoneStatus",

            data: '{id: id}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                var data =  google.visualization.arrayToDataTable(r);

                //Pie
                var options = {
                    title: 'My Progress'
                };
                var chart = new google.visualization.PieChart($("#chart")[0]);

                chart.draw(data,options);
            },
            failure: function (r) {
                alert(r.d);
            },
            error: function (r) {
                alert(r.d);
            }

        });
    }
   </script>

   <div id="chart" style="width: 500px; height: 400px;"></div>

`

我已经读过某个地方,我应该在我的控制器中的视图中调用jsonresult方法,如果这是我应该这样做的方式,请帮助我,我真的很挣扎,请帮助! 谢谢。

在此处输入图片说明

视图

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("visualization", "1", { packages: ["corechart"] });
        google.setOnLoadCallback(drawChart);
        function drawChart() {
            $.ajax({
                type: "GET",
                //my url is different than yours
                //url: "/CHART/AjaxMilestoneStatus",
                url: "/Home/AjaxMilestoneStatus",
                //took off parens in my data
                data: { id: $("#aHidden").val() },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    var data = google.visualization.arrayToDataTable(r);
                    //Pie
                    var options = {
                        title: 'My Progress'
                    };
                    var chart = new google.visualization.PieChart($("#chart")[0]);
                    chart.draw(data, options);
                },
                failure: function (r) {
                    alert(r.d);
                },
                error: function (r) {
                    alert(r.d);
                }
            });
        }
    </script>
    <input type="hidden" id="aHidden" value="2" />
    <div id="chart" style="width: 500px; height: 400px;">
    </div>
</body>
</html>

调节器

    public JsonResult AjaxMilestoneStatus(string id)  
    {
        //swapped {id} with {0}
        string query = String.Format(@"SELECT Status, COUNT(Progress) AS TotalProgress from Milestone Where StudentNumber = '{0}' GROUP BY Status",
                                        id);

        string constr =
         ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;

        List<object> chartData = new List<object>();
        chartData.Add(new object[]
                    {
                    "Status", "TotalProgress"
                    });
        using (var con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(query))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                con.Open();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        chartData.Add(new object[]
                    {
                    sdr["Status"], sdr["TotalProgress"]
                    });
                    }
                }

                con.Close();
            }
        }

        return Json(chartData, JsonRequestBehavior.AllowGet);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM