调用MVC控制器操作时,无法使用amcharts eventDataLoader加载stockEvents

问题描述 投票:0回答:1

我正在使用amcharts股票图表。使用以下代码时,我的图表加载正常,一切正常:

var chart = AmCharts.makeChart("chartdiv", {
    "type": "stock",
    "theme": "light",
    "dataSets": [{
        "title": "Values",
        "color": "#b0de09",
        "fieldMappings": [{
            "fromField": "value",
            "toField": "value"
        }, {
             "fromField": "average",
             "toField": "average"
        }],
        "dataProvider": @Html.Raw(ViewBag.ChartData),
        "categoryField": "date"
   }],
   ...

而我的控制器:

public class ChartController : Controller
{
    public IActionResult Index()
    {
        ViewBag.ChartData = JsonConvert.SerializeObject(GetChartData ());
        return View();
    }
}

但是,当我尝试通过添加以下代码添加股票事件时,会发生两件事:1)图表不再显示,2)控制器中的GetChartEvents操作永远不会被调用,因此显然永远不会返回任何数据。

var chart = AmCharts.makeChart("chartdiv", {
    "type": "stock",
    "theme": "light",
    "dataSets": [{
        "title": "Values",
        "color": "#b0de09",
        "fieldMappings": [{
            "fromField": "value",
            "toField": "value"
        }, {
             "fromField": "average",
             "toField": "average"
        }],
        "dataProvider": @Html.Raw(ViewBag.ChartData),
        "categoryField": "date",
        "eventDataLoader": {
            "url": @Url.Action("GetChartEvents", "ChartController"),
            "format": "json",
            "showCurtain": true,
            "showErrors": true,
            "async": true
        }
   }],
   ...

并在控制器中

public class ChartController : Controller
{
    …
    [HttpGet]
    public IActionResult GetChartEvents()
    {
        ChartEvent[] events = new ChartEvent[3];
        events[0] = new ChartEvent(new DateTime(2007, 12, 17));
        events[1] = new ChartEvent(new DateTime(2008, 10, 27));
        events[2] = new ChartEvent(new DateTime(2009, 07, 06));

        return Json(events);
    }
}

ChartEvent是我自己的类,但因为从未调用过GetChartEvents,所以我认为问题不在于返回数据的格式。在视图中,如果我替换

"url": @Url.Action("GetChartEvents", "ChartController"),

"url": "/Chart/GetChartEvents",

GetChartEvents仍然永远不会被调用,但图表会显示自己。我甚至尝试将事件放在ViewBag中,但这也不起作用

"dataProvider": @Html.Raw(ViewBag.ChartData),
"stockEvents": @Html.Raw(ViewBag.ChartEvents)

作为最后一个注释(和健全检查!),如果我输出@Html.Raw(ViewBag.ChartEvents)的内容,我得到以下看起来很好:

[{“date”:“Date(2007,12,17)”,“type”:“arrowUp”,“backgroundColor”:“#00CC00”,“graph”:“g1”,“description”:“”}, {“date”:“Date(2008,10,27)”,“type”:“arrowUp”,“backgroundColor”:“#00CC00”,“graph”:“g1”,“description”:“”},{ “date”:“Date(2009,07,06)”,“type”:“arrowUp”,“backgroundColor”:“#00CC00”,“graph”:“g1”,“description”:“”}]

任何帮助或见解将不胜感激。

json asp.net-mvc asp.net-core-mvc amcharts amstock
1个回答
0
投票

在他们的导游here之后,很少有可能导致问题的事情。

一,报价:

"url": '@Url.Action("GetChartEvents", "ChartController")',

注意URL周围的单引号。如果没有它们,你的js就是无效的,这就是图形不显示的原因。

其次,它们使用“dataLoader”而不是“eventDataLoader”属性。

第三,确保包含dataloader插件:

<script src="amcharts/plugins/dataloader/dataloader.min.js" type="text/javascript"></script>
© www.soinside.com 2019 - 2024. All rights reserved.