Как я могу использовать элемент управления Asp.Net Chart в Asp.Net MVC 3? - PullRequest
2 голосов
/ 16 декабря 2010

Я знаю, что элемент управления Chart поставляется с новой библиотекой Helpers, но он не обладает теми же функциями, что и элемент управления Asp.Net Charting. Я должен представить данные, где на круговой диаграмме или панели мне нужна ссылка с легким кликом на легенде или ярлыке. Я использую Asp.Net MVC 3 Razor и не могу связать элемент управления Asp.Net Chart с этой функцией. Я могу показать диаграмму, но ссылки не отображаются. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Вы можете использовать ActionResult для визуализации диаграммы.По следующей ссылке находится запись в блоге Дэниэла Хилла - Отображение диаграмм Microsoft .NET 4.0 в ASP.NET MVC

using System;
using System.IO;
using System.Web.Mvc;
using System.Web.UI.DataVisualization.Charting;

namespace Serviscope.Proviso.Web.Code
{
    public class ChartActionResult : ActionResult
    {
        private readonly Chart _chart;
        private readonly ChartImageFormat _imageFormat;

        public ChartActionResult(Chart chart, ChartImageFormat imageFormat = ChartImageFormat.Png)
        {
            if ( chart == null ) { throw new ArgumentNullException("chart"); }

            _chart = chart;
            _imageFormat = imageFormat;
        }

        public override void ExecuteResult(ControllerContext context)
        {
            var response = context.HttpContext.Response;

            response.Clear();
            response.Charset = String.Empty;
            response.ContentType = "image/" + _imageFormat;

            if ( _imageFormat == ChartImageFormat.Png )
            {
                // PNG can only write to a seek-able stream
                //  Thus we have to go through a memory stream, which permits seeking.
                using ( var mStream = new MemoryStream() )
                {
                    _chart.SaveImage(mStream, _imageFormat);
                    mStream.Seek(0, SeekOrigin.Begin);
                    mStream.CopyTo(response.OutputStream);
                }
            }
            else
            { // If we don't have to provide a seek-able stream, write directly to
                //  where the data needs to go.
                _chart.SaveImage(response.OutputStream, _imageFormat);
            }

            _chart.Dispose();
        }
    }
}

и пример:

public ActionResult MyChart()
{
  // Build Chart
  var chart = new Chart()
                  {
                    Height = 300,
                    Width = 400,
                    BackGradientStyle = GradientStyle.TopBottom,
                    BackColor = Color.Gray,
                    BorderSkin = new BorderSkin() { SkinStyle = BorderSkinStyle.Emboss }
                  };

  // Add Chart Area and Set 3-D Settings
  chart.ChartAreas.Add(new ChartArea());
  chart.ChartAreas[0].Area3DStyle = new ChartArea3DStyle()
                                        {
                                          Enable3D = true,
                                          Perspective = 10,
                                          Inclination = 30,
                                          Rotation = 10
                                        };

  // Add Random values
  chart.Series.Add(GenerateRandomSeries(10, 10));
  chart.Series.Add(GenerateRandomSeries(10, 10));
  chart.Series.Add(GenerateRandomSeries(10, 10));

  // Return chart object, wrapped in our custom action result
  return new ChartActionResult(chart);
}

private static readonly Random RandomPointGenerator = new Random();
private static Series GenerateRandomSeries(int max, int count)
{
  var series = new Series();
  series.ChartType = SeriesChartType.Line;

  for (int x = 0; x < count; x++)
  {
    series.Points.AddXY(x + 1, RandomPointGenerator.Next(max));
  }

  return series;
}
0 голосов
/ 16 декабря 2010

Вам просто нужно создать стандартную страницу веб-форм внутри приложения ASP.NET MVC.Скотт Хансельман объясняет, как это сделать здесь .

...