Рендеринг MSChart в виде бритвы MVC3 - PullRequest
2 голосов
/ 28 июля 2011

У меня есть типичная настройка для отображения графиков для веб-страницы 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 вместо изображения диаграммы.

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

Спасибо!

1 Ответ

4 голосов
/ 28 июля 2011

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

@chart

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

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

...