从控制器返回动态数组Asp.Net MVC

4
我可以使用以下代码生成像图片一样的饼图:
```html

enter image description here

```
<script>
         var pieChartData = [
        { label: "Data 1", data: 16, color: "#62cb31", },
        { label: "Data 2", data: 6,  color: "#A4E585", },
        { label: "Data 3", data: 22, color: "#368410", },
        { label: "Data 4", data: 32, color: "#8DE563", }
    ];

    var pieChartOptions = {
        series: {
            pie: {
                show: true
            }
        },
        grid: {
            hoverable: true
        },
        tooltip: true,
        tooltipOpts: {
            content: "%p.0%, %s", // show percentages, rounding to 2 decimal places
            shifts: {
                x: 20,
                y: 0
            },
            defaultTheme: false
        }
    };

    $.plot($("#_ByRegion"), pieChartData, pieChartOptions);
</script>

现在我想做的是从控制器动态生成 var data = [] 。如何实现?数据也来源于数据库。

使用Ajax调用并从控制器返回2D数组。 - Sorangwala Abbasali
@SorangwalaAbbasali 有关于如何做到这一点的示例吗? :) - Yuu
3个回答

3

通过结合Pranav PatelGhanshyam Singh的答案,我能够得到所需的输出。

模型

public class GenderPieChart_Model
{
    public string GenderDesc { get; set; }
    public int GenderID { get; set; }
}

控制器

public JsonResult Gender()
{
     Dashboard_Layer data = new Dashboard_Layer();
     var lst = data.Gender();
     return Json(lst, JsonRequestBehavior.AllowGet);
}

业务层

public IEnumerable<GenderPieChart_Model> Gender()
    {
        List<GenderPieChart_Model> data = new List<GenderPieChart_Model>();
        using (SqlConnection con = new SqlConnection(Connection.MyConn()))
        {
            SqlCommand com = new SqlCommand("dbo.sp_Project_DashBoard 4", con);
            con.Open();
            SqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
            {
                GenderPieChart_Model value = new GenderPieChart_Model();
                value.GenderDesc = Convert.ToString(reader.GetValue(0));
                value.GenderID = Convert.ToInt32(reader.GetValue(1));
                data.Add(value);
            }
        }
        return data;
    }

查看

<div class="flot-chart-content" id="_ByGender" style="height: 150px"></div>
<script>
$(document).ready(function () {
    $.ajax({
        type: "POST",
        url: "@Url.Action("Gender", "Dashboard")",
        content: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var myData = data;
            var pieChartData = [];
            $.each(data, function (i,v) {
                pieChartData.push({ label: v.GenderDesc, data: v.GenderID, color: "#62cb31", });
            })
            var pieChartOptions = {
                series: {
                    pie: {
                        show: true
                    }
                },
                grid: {
                    hoverable: true
                },
                tooltip: true,
                tooltipOpts: {
                    content: "%p.0%, %s", // show percentages, rounding to 2 decimal places
                    shifts: {
                        x: 20,
                        y: 0
                    },
                    defaultTheme: false
                }
            };
            $.plot($("#_ByGender"), pieChartData, pieChartOptions);
        }
    })

});
</script>

2

当您的控制器准备好时,可以调用并在获取数据后(从控制器返回的Json)进一步处理。您可以尝试以下方式:

<script>
$(document).ready(function(){
    $.ajax({
        type: "POST", //GET or POST
        url: "<YOUR URL>",
        data: "<YOUR PARAMETER IF NEEDED>",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){ //data is your json returned from controller
        var myData = JSON.parse(data);

        //create your 'pieChartData' from object 'myData'
        //pieChartData = 

        var pieChartOptions = {
            series: {
                pie: {
                    show: true
                }
            },
            grid: {
                hoverable: true
            },
            tooltip: true,
            tooltipOpts: {
                content: "%p.0%, %s", // show percentages, rounding to 2 decimal places
                shifts: {
                    x: 20,
                    y: 0
                },
                defaultTheme: false
            }
        };

        $.plot($("#_ByRegion"), pieChartData, pieChartOptions);
        }
    });
});
</script>

它会显示JSON中位置的意外标记o - Yuu

2
只需从您的控制器返回Json即可:
首先为属性创建一个模型类。
public class Chart
{
    public string label{get;set;}
    public string data{get;set;}
    public string color{get;set;}
}

MVC动作方法:

public JsonResult Chart()
{
   List<Chart> chartList=new List();
   // Code to fetch Data in List chartList
   return Json(chartList,JsonRequestBehaviour.AllowGet);
}

Ajax调用:

<script>
$(document).ready(function(){
    $.ajax({
        type: "POST", //GET or POST
        url: "/Controller/Chart",
        data: "<YOUR PARAMETER IF NEEDED>",
        dataType: "json",
        success: function(data){ 
          $.each(data,function(i,index){
          // Code to plot Chart here

          });
         }

    });
});
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接