Microsoft Charting,MVC 3和Razor

Vic*_*tor 35 c# asp.net-mvc charts mschart asp.net-mvc-3

此主题相关我想知道是否有人使Microsoft Charting库与Asp MVC 3和Razor一起使用.

我知道引入的新图表助手,但由于这是非常有限的,这不是一个真正的选择.

要创建一个返回图像的动作方法也很容易,但由于所有交互性都会中断(即使只是条形图中条形图的简单工具提示),此方法也有一些限制.

这个例子可能是我发现的最有用的文章,但是我仍然无法使用一个简单的图表,即使它只在动作方法中渲染图像时也能正常工作.此外,我在.net 4下的样本工作正常,但显然那些不是MVC样本.

SO - 有没有人让微软的图表在Razor的Asp MVC 3中完全运行,并且可以发布一个完整解决方案的链接?

Sar*_*ath 14

如果它是工具提示并向下钻取你正在寻找那么这里是一个样本.我尝试过并为我工作.您需要将ImageMap与图像链接才能具有交互性.

具有交互性的MVC图表


smi*_*rne 12

我花了几天时间寻找一种在MVC中创建交互式图表的解决方案,但我看到的所有示例都比以前更加复杂.

Sarath的答案几乎是完美的,但它将图像保存两次,效率不高.使用函数Html.RenderAction(),我们可以在一次通过中完成所有操作,并使其尽可能高效.

这是我提出的解决方案:

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

我没有看到任何解决方案可以一次完成所有事情.最好的部分是它不需要对web.config文件进行任何修改.它也不会尝试在MVC中使用ASP.net控件.这是纯粹的MVC技术.

UPDATE

这是我们要求的代码:

控制器:

public ActionResult Chart()
{
    var chart = buildChart();
    StringBuilder result = new StringBuilder();
    result.Append(getChartImage(chart));
    result.Append(chart.GetHtmlImageMap("ImageMap"));
    return Content(result.ToString());
}
Run Code Online (Sandbox Code Playgroud)

效用函数:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图:

@{ Html.RenderAction("Chart"); }
Run Code Online (Sandbox Code Playgroud)