2017-07-28 67 views
0

我的目标是创建一个列高图,显示各种推销员的名称以及他们销售多少。我写了这个代码从我的SQL数据库返回的名称和每个业务员的销售总和:LINQ SQL方法不填充Highcharts

[HttpPost] 
    public JsonResult ChartVendedores() 
    { 
     //Retorna um JSON contendo o nome do vendedor e o valor por ele vendido, usando inner join pelo id do vendedor. 
     try 
     { 
      var resultado = (from ve in db.tblVendedor 
          join vn in db.tblVenda on ve.vendedor_id equals vn.vendedor_id 
          group vn by new 
          { 
           ve.vendedor_nome 
          }into g 
          select new { 
           vendedor_nome = g.Key.vendedor_nome, 
           venda_valor = g.Sum(x => x.venda_valor) 
          }).ToList(); 

      var jsonResult = new 
      { 
       Nomes = resultado.Select(x => x.vendedor_nome), 
       Valores = resultado.Select(x => x.venda_valor) 
      }; 

      return Json(resultado); 
     }catch(Exception) 
     { 
      return null; 
     } 
    } 

这是被创建的图表,其中,该方法被调用,它是suposed填补图表与数据库的返回数据:

<script> 
$(function() { 
    $.ajax({ 
     url: '/Vendedores/ChartVendedores', 
     type: 'post', 
     async: false, 
     sucess: function (data) { 
      //Constrói o gráfico com os valores retornados pelo banco. 
      Highcharts.chart('container', { 
       chart: { 
        type: 'column' 
       }, 
       title: { 
        text: 'Venda dos Colaboradores' 
       }, 
       xAxis: { 
        categories: [ 
         data.Nomes 
        ], 
        crosshair: true 
       }, 
       yAxis: { 
        min: 0, 
        title: { 
         text: 'Valor (R$)' 
        } 
       }, 
       tooltip: { 
        headerFormat: '<span style="font-size:10px">{point.key}</span><table>', 
        pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' + 
        '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>', 
        footerFormat: '</table>', 
        shared: true, 
        useHTML: true 
       }, 
       plotOptions: { 
        column: { 
         pointPadding: 0.2, 
         borderWidth: 0 
        } 
       }, 
       series: [{ 
        name: 'Valores', 
        data: data.Valores 
       }] 
      }); 
     } 
    }) 
}) 

我是什么我失踪?只要代码去,我不认为我在方法中写了任何错误的代码。我说错了吗?我操纵它错了吗?我试图删除我的Ajax代码,只留下图表本身,因为它位于highchart.com上并且它工作正常,所以问题不在我的容器div或图表代码中。

编辑:正如下面的评论,我看着我的控制台,我收到一条关于Highcharts需要的进口产品的警告。减退如下is this one.看到这个后,我试图删除AJAX,并只使用highchart code。有效!对于当图表尝试使用一些这方面的原因:

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 

当图表代码包含内部sucess: function(data){}

注意它没有找到它:我在代码的beggining进口的一切,同时包含Ajax的脚本被写入最后。

+0

尝试'return Json(resultado,JsonRequestBehavior.AllowGet);'。参考这篇文章:https://stackoverflow.com/questions/8464677/why-is-jsonrequestbehavior-needed –

+0

没有改变,@KhanhTO – William

+0

@William,你是否在前端获取数据。你可以确保在浏览器开发者控制台中返回json结果。浏览器控制台中是否有错误? –

回答

1
$.ajax({ 
    url: '/Vendedores/ChartVendedores', 
    type: 'post', 
    async: false, 
    sucess: function (data) { 

应改为:

$.ajax({ 
    url: '/Vendedores/ChartVendedores', 
    type: 'post', 
    async: false, 
    success: function (data) { 

您有拼错success

+0

哦,我现在很尴尬。谢谢。 – William

0

看看这个,你正在使用的回报(resultado),但要返回的JSON对象是jsonResult,所以用这个:

var resultado = (from ve in db.tblVendedor 
         join vn in db.tblVenda on ve.vendedor_id equals vn.vendedor_id 
         group vn by new 
         { 
          ve.vendedor_nome 
         }into g 
         select new { 
          vendedor_nome = g.Key.vendedor_nome, 
          venda_valor = g.Sum(x => x.venda_valor) 
         }).ToList(); 

     var jsonResult = new 
     { 
      Nomes = resultado.Select(x => x.vendedor_nome), 
      Valores = resultado.Select(x => x.venda_valor) 
     }; 

     return Json(jsonResult); 

请测试,并让我知道,如果它的工作原理:)

 for (var i in data) { 
         // Add some text to the new cells: 
            cell1.innerHTML = data[i].Nomes ; 
            cell2.innerHTML = data[i].Valores ; 
           } 
+0

感谢您的观察!你是对的。但仍然没有填充图表。 – William

+0

请把你的josn结果从浏览器粘贴到这里,这样我就可以检查出现了什么问题 –

+0

并确保你在迭代数据,我想你的响应是一个json数组,所以你需要使用for循环遍历所有数据结果。像这样,看到我编辑的答案 –