c# razor语法 Microsoft Charting,MVC 3和Razor




razor语法 (3)

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

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

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

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

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


我花了几天时间寻找一种在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());
}

效用函数:

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

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

具有交互性的MVC图表


这将是使用ASP.NET MVC 2和Microsoft图表控件的CodeProject的完整解决方案:

这可能和目前的情况一样好(至少我找不到更适合你需求的东西),因为ASP.NET MVC 3仍然只是RTM,剃刀视图引擎也是如此。 无论如何,将它从ASP.NET MVC 2迁移到3并不是什么大问题。 将视图引擎切换到剃须刀需要多一点努力,但整体概念保持不变。

我会说“去吧”,当你遇到具体问题或有问题时,请在这里问一下。

更新

Robert Muehsig的这篇博文也涵盖了这个主题,并且确实有一个可下载的解决方案。 根据您的评论,它看起来更像您实际想要完成的事情:





mschart