2016-02-10 3 views
0

У меня есть метод, который получает данные из базы данных и показывает их на диаграмме. Его работа прекрасна. Теперь мне нужно наложить на него некоторые фильтры, и я сталкиваюсь с проблемами, чтобы передать свои параметры контроллеру.Получить данные с помощью Ajax Jquery и отправить параметры контроллеру

$("#quadro").click(function() { 

    Highcharts.setOptions({ 
     lang: { 
      decimalPoint: ',', 
      thousandsSep: '.' 
     } 
    }); 

    var data1 = $('#data1').val(); 
    var data2 = $('#data2').val(); 
    var empresa = $('#empresa option:selected').text(); 

    $.ajax({ 
     url: 'Painel/QuadroReceitas', 
     dataType: "json", 
     type: "GET", 
     contentType: 'application/json; charset=utf-8', 
     data: { 'data1': data1, 'data2': data2, 'empresa': empresa }, 
     async: false, 
     processData: false, 
     cache: false, 
     delay: 15, 
     success: function (data) { 

      var Categories = new Array(); 
      var FaturadoArray = new Array(); 
      var RecebidoArray = new Array(); 
      var AtrasadoArray = new Array(); 

      for (var i in data) { 
       Categories.push(data[i].Mes); 
       FaturadoArray.push(data[i].Receitas); 
       RecebidoArray.push(data[i].Recebido); 
       AtrasadoArray.push(data[i].Inad_Atual); 
      } 

      var MesArray = JSON.parse(JSON.stringify(Categories)); 
      quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray); 
     }, 

     error: function (xhr) { 
      alert('error'); 
     } 
    }); 
}); 


function quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray) { 

    var GlobalRotation = -90; 
    var GlobalAlign = 'right'; 
    var X; 
    var Y; 

    var chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container', 
      type: 'column', 
      realignLabels: true, 
      animation: false 
     }, 

     title: { 
      text: 'Quadro de Receitas' 
     }, 

     legend: { 
      align: 'left', 
      verticalAlign: 'top', 
      floating: true, 
      x: 0, 
      y: 0 
     }, 

     xAxis: { 
      categories: MesArray, 
      crosshair: true, 
     }, 

     yAxis: { 
      labels: { enabled: false }, 
      title: { enabled: false }, 
     }, 

     credits: { 
      enabled: false 
     }, 

     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}</b></td></tr>', 
      footerFormat: '</table>', 
      shared: true, 
      useHTML: true 
     }, 

     plotOptions: { 
      column: { 
       animation: true, 
       pointPadding: 0.05, // Defaults to 0.1 
       groupPadding: 0.05, // Defaults to 0.2 

       dataLabels: { 
        enabled: true, 
        rotation: GlobalRotation, 
        color: '#FFFFFF', 
        align: GlobalAlign, 
        verticalAlign: "top", 
        y: 10, 
        inside: false, 
        crop: false, 

        style: { 
         fontSize: '12px', 
         fontFamily: 'Verdana, sans-serif' 
        }, 

        formatter: function() { 
         return Highcharts.numberFormat(this.y, 2); 
        } 
       } 
      }, 
     }, 

     series: [ 
      { name: 'Faturado', color: '#004a91', data: FaturadoArray }, 
      { name: 'Recebido', color: '#009147', data: RecebidoArray }, 
      { name: 'Atrasado', color: '#FF0000', data: AtrasadoArray } 
     ] 
    }); 
} 

На контроллере у меня есть код, как ниже:

[HttpGet] 
     public JsonResult QuadroReceitas(string data1, string data2, string empresa) 
     { 
      if(empresa == "empresa" || empresa == null) 
      { 
       empresa = "%"; 
      }    

      //Chave oChave = new Chave(); 
      DateTime agora = DateTime.Now; 
      var start = new DateTime(agora.Year, agora.Month, 1).AddMonths(-11); 
      var end = new DateTime(agora.Year, agora.Month, 1).AddMonths(1).AddDays(-1); 

      if (data1 == null) 
       data1 = start.ToShortDateString(); 

      if (data2 == null) 
       data2 = end.ToShortDateString(); 

      ContasReceberData recData = new ContasReceberData(); 
      List<ContasReceber> receitas = new List<ContasReceber>(); 

      receitas = recData.GetQuadroReceitas(data1, data2, empresa) 
       .Select(o => new ContasReceber 
       { 
        Mes = o.Mes, 
        Receitas = Math.Round(o.Receitas,2), 
        Recebido = Math.Round(o.Recebido, 2), 
        Inad_Atual = Math.Round(o.Inad_Atual, 2) 
       }).ToList(); 

      return Json(receitas, JsonRequestBehavior.AllowGet); 
     } 

Как я уже сказал, это работает отлично, но без параметров:

data1, data2, EMPRESA

Я попытался изменить AJAX на POST и Controller на HttpPost, поскольку я читал в другой теме, но не работал.

+0

Удалите приложение contentType: '/ json; charset = utf-8 ', 'option (не строгая ваши данные) –

+0

Также удалите' processData: false, ' –

+0

Работал, спасибо Стивену !!! –

ответ

0

Поскольку в вашем методе ajax вы устанавливаете processData = false. установите его в true или удалите строку processData и это будет работать!

var empresa = $('#empresa option:selected').text(); 

$.ajax({ 
    url: 'Painel/QuadroReceitas', 
    dataType: "json", 
    type: "GET", 
    contentType: 'application/json; charset=utf-8', 
    data: { 'data1': data1, 'data2': data2, 'empresa': empresa }, 
    async: false, 
    // processData: false, 
    cache: false, 
    delay: 15, 
    success: function (data) { 

     var Categories = new Array(); 
     var FaturadoArray = new Array(); 
     var RecebidoArray = new Array(); 
     var AtrasadoArray = new Array(); 

     for (var i in data) { 
      Categories.push(data[i].Mes); 
      FaturadoArray.push(data[i].Receitas); 
      RecebidoArray.push(data[i].Recebido); 
      AtrasadoArray.push(data[i].Inad_Atual); 
     } 

     var MesArray = JSON.parse(JSON.stringify(Categories)); 
     quadroReceitas(MesArray, FaturadoArray, RecebidoArray, AtrasadoArray); 
    }, 

    error: function (xhr) { 
     alert('error'); 
    } 
}); 

});

+0

Спасибо, Али работал !!! –

Смежные вопросы