简体   繁体   English

从Controller Asp.Net MVC返回动态数组

[英]Return Dynamic Array From Controller Asp.Net MVC

I can generate a Pie Chart Just like the picture by using the code below 我可以使用下面的代码生成一个饼图就像图片一样

在此输入图像描述

<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>

Now what I want to do is to generate the var data = [] dynamically from Controller. 现在我想要做的是从Controller动态生成var data = [] How to do this? 这该怎么做? Also the data is from the Database. 数据也来自数据库。

you can call when your controller on ready event and after getting data (returned Json from your controller) can process further. 您可以在控制器处于就绪事件时和获取数据后(从控制器返回Json)进行调用。 You can try like below 您可以尝试如下

<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>

Its simple just return Json from your controller: 它的简单只是从你的控制器返回Json:

first create a model class for the properties 首先为属性创建一个模型类

public class Chart
{
    public string label{get;set;}
    public string data{get;set;}
    public string color{get;set;}
}

MVC action method:- MVC动作方法: -

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

Ajax Call:- 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>

By Combining Pranav Patel and Ghanshyam Singh answers I was able able to reach the desired output 通过结合Pranav PatelGhanshyam Singh的答案,我能够达到所需的输出

Model 模型

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

Controller 调节器

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

Business Layer 业务层

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;
    }

View 视图

<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>

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

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