Рендеринг MSChart в режиме бритвы MVC3

У меня есть типичная настройка для отображения диаграмм для веб-страницы MVC3 -

Вот код для всех компонентов.

Код контроллера:

public ActionResult ShowChart() {

     myViewModel model = _myService.GetViewModel();
     return View(model);
}

Просмотр модели:

using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.UI.DataVisualization.Charting;

public class ViewModel {

     public List<Chart> Charts { get; set; }

}

Просмотр: (View.cshtml)

@foreach (System.Web.UI.DataVisualization.Charting.Chart chart in Model.Charts)
{
    @chart
}

Построитель диаграмм:

Это заполняет модель представления.

private List<Chart> BuildCharts(List<Dummy> chartData)
    {
        var charts = new List<Chart>();
        foreach (Dummy chart in chartData)
        {
            charts.Add(BuildChart(chart));
        }

        return charts;
    }

    private Chart BuildChart(Dummy chartData)
    {
        var data = new ChartData
        {
            Title = "Chart X",
            xValues = chartData.hours,
            yValues = chartData.values
        };

        return ConfigureChart(data);
    }

    private Chart ConfigureChart(ChartData data)
    {
        Chart chart = new Chart(); 
        chart.Width = 150; 
        chart.Height = 300; 
        chart.Attributes.Add("align", "left"); 
        chart.Titles.Add(data.Title); 
        chart.ChartAreas.Add(new ChartArea());
        chart.Series.Add(new Series());
        chart.Legends.Add(new Legend("XXXX_YYY"));
        chart.Legends[0].TableStyle = LegendTableStyle.Auto;
        chart.Legends[0].Docking = Docking.Bottom;
        chart.Series[0].ChartType = SeriesChartType.Line;

        chart.Series[0].BackGradientStyle = GradientStyle.DiagonalLeft;
        chart.Series[0].BackSecondaryColor = System.Drawing.Color.LightGray;

        for (int i = 0; i < data.xValues.Length; i++)     
        {        
            string x = data.xValues[i];
            decimal y = data.yValues[i];

            int ptIdx = chart.Series[0].Points.AddXY(x, y);

            DataPoint pt = chart.Series[0].Points[ptIdx];
            pt.Url = "/Instance/Index/";
            pt.ToolTip = "Tooltip";
            pt.LegendText = "#VALX: #VALY";
            pt.LegendUrl = "/Contact/Details/";
            pt.LegendToolTip = "Click to view dummy information...";
        }

        return chart; 
    }

Но код - @chart в представлении не отображает диаграмму. то, что я получаю на странице, представляет собой строку «System.Web.UI.DataVisualization.Charting.Chart» вместо изображения диаграммы.

Может кто-нибудь дать мне знать, что здесь не так. Как я могу вывести диаграмму на представление?

Спасибо!


person andytech    schedule 27.07.2011    source источник


Ответы (1)


Вы не можете сделать:

@chart

Asp.Net MVC не знает, как их отображать. Что вы можете сделать, так это запросить каждую диаграмму как изображение. Следуйте это руководство.

Вам также следует переместить раздел «Вариант A» или «Вариант B» в раздел шаблон редактора.

person John Kalberer    schedule 27.07.2011
comment
Джон, спасибо за ссылку на учебник. Я бы попробовал вариант Б, так как он кажется более подходящим в моей ситуации. - person andytech; 28.07.2011
comment
Я не понимаю, как это руководство работает с механизмом просмотра Razor. Это сработало для вас? - person sydneyos; 26.03.2012
comment
Использование другого механизма просмотра не имеет значения. Я думаю, вам просто нужно обернуть код вот так @{ ...code... } - person John Kalberer; 26.03.2012