Я провел несколько дней в поисках решения, которое создает интерактивные диаграммы в MVC, но все примеры, которые я видел, были намного сложнее, чем они должны быть.
Ответ от Сарата почти идеален, но он сохраняет изображение дважды, что не очень эффективно.С помощью функции Html.RenderAction () мы можем сделать все за один проход и сделать его максимально эффективным.
Вот решение, которое я нашел:
http://blog.smirne.com/2012/09/creating-interactive-charts-with-aspnet.html
Я не видел ни одного решения, которое могло бы сделать все за один проход.Самое приятное то, что он не нуждается в каких-либо изменениях в файле web.config.Он также не пытается использовать элемент управления ASP.net в MVC.Это чистая технология MVC.
ОБНОВЛЕНИЕ
Вот код по запросу:
КОНТРОЛЛЕР:
public ActionResult Chart()
{
var chart = buildChart();
StringBuilder result = new StringBuilder();
result.Append(getChartImage(chart));
result.Append(chart.GetHtmlImageMap("ImageMap"));
return Content(result.ToString());
}
Функции утилит:
private Chart buildChart()
{
// Build Chart
var chart = new Chart();
// Create chart here
chart.Titles.Add(CreateTitle());
chart.Legends.Add(CreateLegend());
chart.ChartAreas.Add(CreateChartArea());
chart.Series.Add(CreateSeries());
return chart;
}
private string getChartImage(Chart chart)
{
using (var stream = new MemoryStream())
{
string img = "<img src='data:image/png;base64,{0}' alt='' usemap='#ImageMap'>";
chart.SaveImage(stream, ChartImageFormat.Png);
string encoded = Convert.ToBase64String(stream.ToArray());
return String.Format(img, encoded);
}
}
ВИД:
@{ Html.RenderAction("Chart"); }