Подтвердить что ты не робот

Microsoft Charting, MVC 3 и Razor

Связано с Этот раздел Интересно, установил ли кто-нибудь библиотеку Microsoft Charting работу с Asp MVC 3 и Razor.

Я знаю о новом помощнике диаграммы, но так как это очень ограниченно, это на самом деле не вариант.

Для создания метода действия, который возвращает изображение, также достаточно просто, но поскольку вся интерактивность ломается (даже просто всплывающие подсказки для баров на гистограмме), этот метод имеет несколько ограничений.

Этот пример, вероятно, самая полезная статья, которую я нашел, но я все еще не могу получить простой график, даже если он работает при рендеринге изображения только в методе действия. Кроме того, у меня есть образцы, работающие нормально под .net 4, но, очевидно, эти arent образцы MVC.

SO - кто-нибудь получил диаграмму Microsoft, полностью работающую в Asp MVC 3 с Razor, и может опубликовать ссылку на полное решение?

4b9b3361

Ответ 1

Если это подсказка и развертка, вы ищете, то вот образец. Я старался и работал у меня как прелесть. Чтобы иметь интерактивность, вам необходимо иметь ImageMap, связанный с вашим изображением.

Шаблоны MVC с интерактивностью

Ответ 2

Я потратил несколько дней на поиск решения, которое создает интерактивные диаграммы в MVC, но все примеры, которые я видел, были намного сложнее, чем они должны быть.

Ответ от Sarath почти идеален, но он сохраняет изображение дважды, что не очень эффективно. С помощью функции Html.RenderAction() мы можем сделать все за один проход и сделать его настолько эффективным, насколько это возможно.

В этом решении я придумал:

http://blog.smirne.com/2012/09/creating-interactive-charts-with-aspnet.html

Я не видел решения, которое может сделать все за один проход. Большая часть этого заключается в том, что он не нуждается в каких-либо изменениях в файле web.config. Он также не пытается использовать элемент управления ASP.net в MVC. Это чистая технология MVC.

UPDATE

Здесь код в соответствии с запросом:

CONTROLLER:

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);
    }
}

VIEW:

@{ Html.RenderAction("Chart"); }

Ответ 3

Здесь было бы полное решение для CodeProject с использованием ASP.NET MVC 2 и Microsoft Charting Controls:

Скорее всего, это так хорошо, как сейчас (по крайней мере, я не смог найти ничего, что лучше соответствует вашим требованиям), потому что ASP.NET MVC 3 остается еще RTM, а также движок просмотра бритвы. Во всяком случае, для переноса его из ASP.NET MVC 2 в 3 это не большая проблема. Переключение механизма просмотра на бритву было бы немного больше усилий, но общая концепция остается прежней.

Я бы сказал "пойдите для этого", и когда вы столкнетесь с конкретной проблемой или зададите вопрос, спросите ее здесь.

Обновление

Это сообщение в блоге от Роберта Муэсига также охватывает тему и имеет загружаемое решение. Основываясь на вашем комментарии, он больше похож на то, что вы на самом деле хотите достичь: