Использование Microsoft Chart Control в ASP.NET MVC возвращает пустое изображение - PullRequest
1 голос
/ 28 апреля 2010

Используя ответ Генерация изображения из контроллера из этого поста , я создал действие контроллера, чтобы вернуть изображение диаграммы, как показано ниже (значения 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");
        }
    }

Проблема в том, что изображение, которое возвращает контроллер, пустое (хотя оно возвращает изображение)

Я надеюсь, что это что-то простое, что я упустил! Любой вклад будет оценен, спасибо.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

Надеюсь, это поможет .....

У меня была такая же проблема:

Это все связано с цветами, я добавил к вашему коду какой-то код, воспользовавшись другим примером из этого блога, и вывел из этого вопрос - так что "Спасибо" всем ....

    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");
        }
    } 

Кроме того, вам необходимо убедиться, что ваш контроллер имеет:

с использованием System.Drawing; использование System.Web.UI.WebControls;

Приветствую всех ...

JK.

0 голосов
/ 06 июня 2013

Привет, у меня была та же проблема, и это потому, что я сохранял изображение в другое время, когда оно было создано. При рендеринге внутреннее состояние проигрывает. Протестируйте создание диаграммы снова перед сохранением изображения. Извините за мой английский.

...