C# Microsoft图表、MVC 3和Razor

C# Microsoft图表、MVC 3和Razor,c#,asp.net-mvc,charts,asp.net-mvc-3,mschart,C#,Asp.net Mvc,Charts,Asp.net Mvc 3,Mschart,我想知道是否有人使用Asp MVC 3和Razor开发了Microsoft图表库 我知道引入了新的图表助手,但由于它非常有限,所以这不是一个真正的选项 创建一个返回图像的动作方法也很容易,但是由于所有的交互都会中断(即使只是条形图中条形图的简单工具提示),这种方法也有一些局限性 这可能是我找到的最有帮助的文章,但我仍然无法让一个简单的图表工作,即使它在仅以动作方法渲染图像时工作。另外,我已经得到了在.NET4下运行良好的示例,但显然这些不是MVC示例 那么-是否有人使用Razor在Asp MVC

我想知道是否有人使用Asp MVC 3和Razor开发了Microsoft图表库

我知道引入了新的图表助手,但由于它非常有限,所以这不是一个真正的选项

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

这可能是我找到的最有帮助的文章,但我仍然无法让一个简单的图表工作,即使它在仅以动作方法渲染图像时工作。另外,我已经得到了在.NET4下运行良好的示例,但显然这些不是MVC示例


那么-是否有人使用Razor在Asp MVC 3中完全使用Microsoft charting并可以发布指向完整解决方案的链接?

以下是使用Asp.NET MVC 2和Microsoft charting控件的CodeProject的完整解决方案:

这可能是目前最好的结果(至少我找不到更适合您需求的东西),因为ASP.NET MVC 3仍然只是RTM,razor视图引擎也是如此。无论如何,将它从ASP.NET MVC 2迁移到3并不是什么大事。将视图引擎切换到razor需要花费更多的精力,但总体概念保持不变

我会说“去做”,当你面对一个具体的问题或有一个问题时,在这里问它

更新

Robert Muehsig的这篇博文也涵盖了这一主题,并提供了一个可下载的解决方案。根据您的评论,它看起来更像您实际想要实现的目标:


如果您要查找的是工具提示和向下钻取,那么这里有一个示例。我试着给自己当护身符。您需要将ImageMap链接到您的图像才能具有交互性


我花了几天时间寻找一种在MVC中创建交互式图表的解决方案,但我看到的所有示例都比实际情况复杂得多

Sarath给出的答案几乎是完美的,但它将图像保存了两次,这不是很有效。通过函数Html.RenderAction(),我们可以一次完成所有工作,并尽可能提高效率

以下是我提出的解决方案:

我还没有看到任何解决方案可以一次完成所有事情。最好的一点是,它不需要对web.config文件进行任何修改。它也不尝试在MVC中使用ASP.net控件。这是纯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);
    }
}

谢谢,不幸的是,这个解决方案是“简单方法”的一个例子,这意味着他们使用简单的方法,这意味着没有交互性。这里有更多详细信息:-他们称之为“二进制流”,我基本上希望其他两个中的一个能够有显示每个数据点的值的工具提示。@Victor:我看到了你的观点,并更新了我的答案。希望这能帮上忙。谢谢,这更符合我的要求。在编译.NET3.5和3.5图表控件时,我可以在VS2010中使用它,但是我仍然无法将其转换为使用更新版本(Razor与否)。我可以将其转换为编译,但在运行时仍然会出现大量空引用异常。谢谢你的更新,我会把它标记为答案,除非没有人能链接到一个更新的解决方案。看起来很有希望,正是我想要的!我现在会把这个标记为一个答案,如果以后遇到任何问题,我会回来的。谢谢杰出的通过一些调整,它也可以与MVC3一起使用。谢谢你能把链接中的示例代码发布到你的答案中吗?在这里。我希望这有帮助!
@{ Html.RenderAction("Chart"); }