Ви можете використовувати елементи керування діаграмою двома способами:
Генерування зображення з контролера
Створюючи діаграму та повертаючи її як зображення з дії (як, на мою думку, посилається на Чатумана):
Chart chart = new Chart();
chart.BackColor = Color.Transparent;
chart.Width = Unit.Pixel(250);
chart.Height = Unit.Pixel(100);
Series series1 = new Series("Series1");
series1.ChartArea = "ca1";
series1.ChartType = SeriesChartType.Pie;
series1.Font = new Font("Verdana", 8.25f, FontStyle.Regular);
series1.Points.Add(new DataPoint {
AxisLabel = "Value1", YValues = new double[] { value1 } });
series1.Points.Add(new DataPoint {
AxisLabel = "Value2", YValues = new double[] { value2 } });
chart.Series.Add(series1);
ChartArea ca1 = new ChartArea("ca1");
ca1.BackColor = Color.Transparent;
chart.ChartAreas.Add(ca1);
using (var ms = new MemoryStream())
{
chart.SaveImage(ms, ChartImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return File(ms.ToArray(), "image/png", "mychart.png");
}
Стиль веб-форм
Таким чином ви просто включаєте діаграму у свої подання .aspx (як і у традиційних веб-формах). Для цього вам доведеться підключити відповідні біти у вашому web.config
<controls>
...
<add tagPrefix="asp"
namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
<httpHandlers>
...
<add path="ChartImg.axd"
verb="GET,HEAD"
validate="false"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>
<handlers>
...
<add name="ChartImageHandler"
preCondition="integratedMode"
verb="GET,HEAD"
path="ChartImg.axd"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
Ви не можете запускати код всередині елементів DataPoint під час побудови діаграми, тому для підключення даних вам знадобиться метод у класі View. Для мене це нормально працює. Працюючи таким чином, елемент керування відображає URL-адресу до зображення, що генерується обробником http-діаграми. Під час розгортання вам потрібно буде надати папку для запису для кешування зображень.
* Підтримка VS 2010 / .NET 4 *
Щоб це працювало в .NET 4, вам потрібно змінити посилання на діаграми на версію 4.0.0.0 за допомогою відповідного маркера відкритого ключа.
Також здається, що елемент керування діаграмою тепер генерує URL-адреси до поточного шляху запиту, а не до маршруту запиту. Для мене це означало, що всі запити діаграми спричинили 404 помилки, оскільки /{Controller}/ChartImg.axd
еквіваленти були заблоковані маршрутами. Щоб виправити це, я додав додаткові дзвінки IgnoreRoute, які охоплюють мої звички - було б більш загальним рішенням:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...
MemoryStream ms = new MemoryStream()
має бути вusing
блоці, а контролер MVC має допоміжні методи повернення файлів - замістьnew FileStreamResult
вас це можна зробитиreturn File(ms.ToArray(), "image/png", "mychart.png")