从 .ajax 结果解析集合

问题描述

在我的数据访问层中,我有一个名为 Meter 的类:

public class Meter {
    public String Substation { get; set; }
    public String Service { get; set; }
    public String Account { get; set; }
    public String Rate { get; set; }
    public String Customer { get; set; }
    public String Location { get; set; }
    public String SerialNumber { get; set; }
    public DateTime? Start { get; set; }
    public DateTime? End { get; set; }
    public int Count { get; set; }
}

和另一个名为 Meters 的类,它是 Meter 的集合:

public class Meters : List<Meter> {
    public Meters Subset(String service) {
        var result = new Meters();
        var data = this.Where(x => x.Service == service);
        result.AddRange(data);
        return result;
    }
    public Meters TopRate(int max = 10) {
        var result = new Meters();
        var data = this.OrderBy(x => x.AccountRate).ToArray();
        do {
            var item = data[result.Count];
            result.Add(item);
        } while (result.Count < max);
        return result;
    }
    public Meters TopSubstation(int max = 10) {
        var result = new Meters();
        var data = this.OrderBy(x => x.Substation).ToArray();
        do {
            var item = data[result.Count];
            result.Add(item);
        } while (result.Count < max);
        return result;
    }
}

在我的 ASP.NET MVC 4 控制器中,我在 JsonResult 中获取这些数据:

    public async Task<JsonResult> GetReport([DataSourceRequest] DataSourceRequest request,String serviceType = null) {
        var result = new DataSourceResult();
        _meters = new Domain.Meters();
        try {
            var report = await _portal.ReadGapReport(_reportID);
            if ((serviceType == "Electric") || (serviceType == "Gas") || (serviceType == "Water")) {
                _meters.AddRange(report.Subset(serviceType));
            } else {
                _meters.AddRange(report);
            }
            result = _meters.ToDataSourceResult(request);
        } catch (Exception err) {
            LoggerUtil.Error("ReadGapReport Error",err);
            result.Errors = err.Message;
        }
        return new JsonResult { Data = result,MaxJsonLength = Int32.MaxValue };
    }

这很好用,而且我在 Kendo Grid 中看到了数据:

    @(Html.Kendo().Grid<DataAnalysis.Domain.Meter>()
    .Name("grid")
    .Columns(c => {
        c.Bound(o => o.Substation).Title("Substation");
        c.Bound(o => o.Service).Title("Service");
        c.Bound(o => o.Account).Title("Account");
        c.Bound(o => o.Rate).Title("Rate");
        c.Bound(o => o.Customer).Title("Customer");
        c.Bound(o => o.Location).Title("Location");
        c.Bound(o => o.SerialNumber).Title("Meter");
        c.Bound(o => o.Start).Title("Start");
        c.Bound(o => o.End).Title("End");
        c.Bound(o => o.Days).Title("Days");
    })
    .sortable(o => o.sortMode(GridSortMode.SingleColumn))
    .Pageable(p => p.Enabled(false))
    .Resizable(resizable => resizable.Columns(true))
    .Scrollable(s => s.Endless(true))
    .ToolBar(x => x.Custom().Text("Export").HtmlAttributes(new { href = "#",id = "export" }))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("GetReport","Report"))
        .Events(e1 => {
            e1.Error("onError");
        })
    )
    .AutoBind(false)
    .Events(e => e.DataBound("onDataBound")))

但是,我需要收集和处理要在 HighlandChart.org pie charts显示摘要信息。

databound事件中,如何读取数据进行统计

function onDataBound(e) {
    var grid = $(hashId).data('kendoGrid');
    for (var i = 0; i < grid.columns.length; i++) {
        grid.autoFitColumn(i);
    }

    $.each(e,function (index) {
        console.log('data(' + index + ') = ' + e[index]);
    });

    var charts = { // chart id,title,chart type,data[],xAxis,yAxis
        1: ['piefigcontainer1','Meter Count per Substation (Top 10)','pie',[]],2: ['piefigcontainer2','Meter Count per Feeder (Top 10)',3: ['piefigcontainer3','Meter Count per Cycle (Top 10)',4: ['piefigcontainer4','Meter Count per Rate (Top 10)',5: ['barfigcontainer1','Meter Count per Gap Tier (in Days)','bar',[],[0,10,20,30,40,50,60,70,80],['0 to 10','10 to 100','100 to 365','More than 365']
        ]
    };

    $.each(charts,function (key,value) {
        Highcharts.chart(charts[key][0],{
            chart: {
                plotBackgroundColor: null,plotBorderWidth: null,plotShadow: false,type: charts[key][2]
            },credits: { text: '' },title: { text: charts[key][1] },plotOptions: {
                pie: {
                    allowPointSelect: true,cursor: 'pointer',dataLabels: { enabled: true },showInLegend: true
                }
            },});
    });
};

上面有一小块我试着去读取返回的数据:

    $.each(e,function (index) {
        console.log('data(' + index + ') = ' + e[index]);
    });

但是,它似乎返回了各种 HTML,而不是我预期的数据。

我需要能够收集数据以显示在汇总图表中。

summary charts

在 javascript 中,想法是用 charts 填充 push 数组,但我没有得到正确的数据。

而且,我不知道如何读取数据的细节,例如 SubstationCustomer 字段。

这可以做到吗,我是不是做错了,或者我是否在 C# 中创建了一个不会在 javascript 中实现我想要的设计?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)