在 ASP.NET MVC 中使用 Microsoft 图表控件返回空白图像

Jim*_*mbo 1 asp.net-mvc controller image mschart microsoft-chart-controls

使用这篇文章中的“从控制器生成图像”答案,我创建了一个控制器操作来返回图表图像,如下所示(X 和 Y 值只是作为测试数据):

    public FileContentResult HistoryChart()
    {
        Chart chart = new Chart();
        string[] currencies = { "ZAR", "USD", "GBP", "JPY" };

        foreach (string currency in currencies)
        {
            Series series = new Series(currency);
            series.ChartType = SeriesChartType.FastLine;
            for (int x = 0; x <= 30; x++)
                series.Points.AddXY(x, (x * 5));
            chart.Series.Add(series);
        }

        using (MemoryStream ms = new MemoryStream())
        {
            chart.SaveImage(ms, ChartImageFormat.Png);
            ms.Seek(0, SeekOrigin.Begin);

            return File(ms.ToArray(), "image/png", "mychart.png");
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,控制器返回的图像是空白的(尽管它确实返回图像)

我希望它是我遗漏的一些简单的东西!任何意见将不胜感激,谢谢。

小智 5

希望这可以帮助.....

我也遇到过同样的问题:

这一切都与颜色有关,在使用此博客中的另一个示例并从中推断出问题后,我向您添加了一些代码 - 所以“谢谢”大家......

    public FileContentResult HistoryChart()
    {
        Chart chart = new Chart();
        **chart.BackColor = Color.Transparent;**

        string[] currencies = { "ZAR", "USD", "GBP", "JPY" };

        foreach (string currency in currencies)
        {
            Series series = new Series(currency);
            series.ChartType = SeriesChartType.FastLine;
            for (int x = 0; x <= 30; x++)
                series.Points.AddXY(x, (x * 5));
            chart.Series.Add(series);
        }

        **ChartArea ca1 = new ChartArea("ca1");
        ca1.BackColor = Color.Cyan;
        chart.ChartAreas.Add(ca1);**

        using (MemoryStream ms = new MemoryStream())
        {
            chart.SaveImage(ms, ChartImageFormat.Png);
            ms.Seek(0, SeekOrigin.Begin);

            return File(ms.ToArray(), "image/png", "mychart.png");
        }
    } 
Run Code Online (Sandbox Code Playgroud)

此外,您还需要确保您的控制器具有:

使用系统绘图;使用 System.Web.UI.WebControls;

为大家干杯...

JK。