2016-05-17 3 views
1

Ich erzeuge Daten für Jquery flot in meinem MVC-Controller und möchte eine ausgefeiltere Struktur verwenden, wo ich die Farben für jeden Balken usw. ändern könnte.Wie man JSON-Daten von MVC4 an Flot weiterleitet, ohne einen Adapter zu schreiben

dies zu tun, ich data structure that looks following

{ 
label: "y = 3", 
data: [[0, 3], [10, 3]] 
} 

ich hatte kein Problem Daten übergibt, wenn es war einfach Array, indem einfach die Daten zu erhalten und die Gestaltung den es wie folgt

var data = topAgents.Select(agent => new List<object> 
     { 
      agent.User != null ? string.Format("{0}", agent.User).Replace("SAGANTGB\\", "") : null, 
      agent.Amount 
     }).ToList(); 

     return Json(data, JsonRequestBehavior.AllowGet); 
passieren muß

und in Javascript-Seite:

function onAgentDataReceived(series) { 
     $("#agents").empty(); 
     $.plot("#agents", [series], { bars: { show: true, barWidth: 0.6, align: "center" }, xaxis: { mode: "categories", tickLength: 0 } }); 
    } 

aber jetzt Daten in Ich kann nicht scheinen zu können, eine Struktur so gestalten, dass passen würde, was $ .plot erwartet.

Bisher habe ich versucht:

KeyValue Paar:

var grouped = result.GroupBy(o => o.CREATE_USER_ID).Select(agent => new 
       { 
        data = new KeyValuePair<string,int>(
        agent.Key != null ? string.Format("{0}", agent.Key).Replace("SAGANTGB\\", "") : null, agent.Count() 
         ), 
        color = "yellow" 
       }).ToList(); 

Objekt mit den Eigenschaften:

var grouped = result.GroupBy(o => o.CREATE_USER_ID).Select(agent => new 
       { 
        data = new { A= 
        agent.Key != null ? string.Format("{0}", agent.Key).Replace("SAGANTGB\\", "") : null, B = agent.Count() 
         }, 
        color = "yellow" 
       }).ToList(); 

Name Wert Sammlung

var grouped = result.GroupBy(o => o.CREATE_USER_ID).Select(agent => new 
       { 
        data = new NameValueCollection 
        {{ 
         agent.Key != null ? string.Format("{0}", agent.Key).Replace("SAGANTGB\\", "") : null, agent.Count().ToString()} 
        }, 
        color = "yellow" 
       }).ToList(); 

Anonym Objektarray

var grouped = result.GroupBy(o => o.CREATE_USER_ID).Select(agent => new 
       { 
        data = new object[] { agent.Key != null ? string.Format("{0}", agent.Key).Replace("SAGANTGB\\", "") : null, agent.Count()}, 
        color = "yellow" 
       }).ToList(); 

aber keiner von ihnen flied

IMHO einfach data = new object { agent.Key, agent.Count()}, sollte funktionieren aber es funktioniert nicht auf Build mit: Error 16 Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access..

Ich könnte die Daten in JS nach dem Abrufen umformen, möchte jedoch diesen unnötigen Schritt vermeiden.

Wie kann ich Daten von MVC an Javascript übergeben, ohne es auf JS-Ende umzuformen?

Antwort

0

Nach dieser Frage für 20 Minuten zu schreiben, gelang nächstes anprobieren

var grouped = 
    result.GroupBy(o => o.CREATE_USER_ID).Select(agent => new 
    { 
     data = new List<List<object>> 
     { 
      new List<object> 
      { 
       agent.Key != null ? string.Format("{0}", agent.Key).Replace("SAGANTGB\\", "") : null, 
       agent.Count() 
      } 
     }, 
     color = "yellow" 
    }).ToList(); 

return Json(grouped, JsonRequestBehavior.AllowGet); 

Anscheinend müssen Sie es in der Liste wickeln verdoppeln.

vergessen es nicht mehr zu erwähnen ist, müssen umwickeln in Array auf JS Seite

$.ajax({ 
     url: '/dashboard/Home/CancellationAgents/', 
     type: "GET", 
     dataType: "json", 
     success: onCancellationAgentsReceived 
    }); 

    function onCancellationAgentsReceived(series) { 
     $("#agentcancellations").empty(); 
     $.plot("#agentcancellations", series, { 
      bars: { show: true, barWidth: 0.7, align: "center" }, xaxis: {mode: "categories", tickLength: 0, position: "bottom"}}); 
    } 

Hoffnung das spart Ihnen einige Zeit

Verwandte Themen