在ASP.Net MVC中绘制图表3

我在ASP.Net MVC 3中使用Chart web helper。我在网上看到了一系列shiny的图像,显​​示了这个API的function,但几乎没有关于如何设置图表样式的文档。 例如,我需要在图表外显示标签,我想指定百分比,而不是十进制值等。

有一个webforms项目可供下载: http ://weblogs.asp.net/scottgu/archive/2010/02/07/built-in-charting-controls-vs-2010-and-net-4-series.aspx和非常简单的类文档,解释了如何分配值和指定基本尺寸。

据我所知,MVC 3尚未发布任何书籍,但肯定会有某种文档说明如何使用该工具?

谢谢

编辑:

根据我的阅读,ASP.Net MVC 3要么通过删除图表样式的能力退出图表工具,要么根本没有记录。 看过这篇文章: http : //forums.asp.net/t/1620783.aspx/1?ASP+NET+MVC+3+Beta+Chart+Helper+Styling+Please+Help+ ,在那里描述了一个非常类似的问题。

编辑2:似乎Microsoft在MVC 3中部分实现了MSChartsfunction。为了使用MSCharts,必须在web.configuration文件中导入和注册System.Web.DataVisualization程序集。 Ť

这样,请求就从视图发送到控制器。 控制器生成图形的图像并传回图像结果。 然后,结果将显示在视图中。 这很有用,因为它提供了某种分离。 我仍然不明白为什么System.WebHelpers.Chart还没有提供这个function,但希望它能在不久的将来得到解决。

编辑3:还有几点要做。 不要在视图中构建图形 – 它们应由控制器提供。 如果您决定使用视图构建图形,请确保更新Views文件夹中的web.config以在命名空间部分中包含 。 程序集和命名空间的名称有点令人困惑。 当名称空间被称为System.Web.UI.DataVisualization时,会调用程序集:System.Web.DataVisualization。 最后,我认为图表API很棒,它提供图像,这意味着可以从所有Web浏览器访问图表。 图表的质量很棒。 我已经研究过Fusion Charts,HighCharts和其他一些jQuery / JavaScript / Flash驱动图表等替代品。 他们都试图从你那里拿走300英镑到1000英镑而不试图满足开发人员的最基本需求。

图表控件基于之前单独的名为MS Chart的项目。

Alex Gorev的博客(MSFT项目负责人): http : //blogs.msdn.com/b/alexgor/

MS Chart论坛: http : //social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/

MSDN上的文档: http : //msdn.microsoft.com/en-us/library/dd456632(VS.100).aspx

这些post似乎有点过时,但MS Chart和新的数据可视化库之间的API几乎相同。

要解决您的示例问题:

1)要在图表外显示标签,每个Series对象都有一个属性的字典数组。

series["PieLabelStyle"] = "Outside";

2)要指定百分比而不是原始值, Series对象的Label属性采用格式化字符串。

series.Label = "#PERCENT{P0}"

这些自定义属性可在http://msdn.microsoft.com/en-us/library/dd456764.aspx上详细获得。

编辑:添加代码示例

好的,这是一个完整的代码示例。 我正在使用System.Web.DataVisualization v4.0.0.0,因此这应该是最新的MVC 3.上面列出的series不是实际的Chart.Series属性(这是一个SeriesCollection )。 这是您要添加到该series的单个series

 public ActionResult TestForSOExample() { // slug in some data var data = new Dictionary { {"test", 10.023f}, {"test2", 20.020f}, {"test3", 19.203f}, {"test4", 4.039f}, {"test5", 5.343f} }; var chart = new Chart(); var area = new ChartArea(); // configure your chart area (dimensions, etc) here. chart.ChartAreas.Add(area); // create and customize your data series. var series = new Series(); foreach (var item in data) { series.Points.AddXY(item.Key, item.Value); } series.Label = "#PERCENT{P0}"; series.Font = new Font("Segoe UI", 8.0f, FontStyle.Bold); series.ChartType = SeriesChartType.Pie; series["PieLabelStyle"] = "Outside"; chart.Series.Add(series); var returnStream = new MemoryStream(); chart.ImageType = ChartImageType.Png; chart.SaveImage(returnStream); returnStream.Position = 0; return new FileStreamResult(returnStream, "image/png"); } 

当您调出控制器的动作时,会显示以下图像。

控制器动作的示例图像

我建议在客户端上呈现图表,而不是在服务器上进行,服务器实际应该用于从中提取数据。 我会像谷歌图表那样使用smth。 但是如果你真的决定从服务器中提取图表,图像是特定的,那么最简单的方法是使用上面的方法 – 图表类。 但是,这种方法的一个缺点是没有设计师,但实际上,正如我发现的,如果你创建WinForms应用程序并拖放Charts控件,它就完全一样了,并且有一个设计师,所有你需要的是复制/粘贴设计器生成的代码并编写一些处理逻辑(如果需要)。 它让生活更轻松。