【问题标题】:Return Dynamic Array From Controller Asp.Net MVC从控制器 Asp.Net MVC 返回动态数组
【发布时间】:2017-02-24 06:29:47
【问题描述】:

我可以使用下面的代码生成一个饼图,就像图片一样

<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调用并从控制器返回二维数组
  • @SorangwalaAbbasali 有关如何做到这一点的任何示例? :)

标签: c# jquery arrays asp.net-mvc pie-chart


【解决方案1】:

通过组合 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>
    

    【讨论】:

    • 它会说Unexpected token o in JSON at position
    【解决方案3】:

    很简单,只需从控制器返回 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2012-02-28
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多