新的asp.net图表控件 - 它们将与MVC(最终)一起使用吗?

Kyl*_*est 74 .net asp.net asp.net-mvc charts

Scott Gu刚刚发布了由.NET团队分发的一组新的图表控件.它们看起来令人难以置信:http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt. ASPX

百万美元的问题是......他们会与MVC合作,如果是的话,什么时候?

Sim*_*ele 94

您可以通过两种方式使用图表控件:

从控制器生成图像

通过生成图表并将其作为动作中的图像返回(正如Chatuman所指的那样):

Chart chart = new Chart();
chart.BackColor = Color.Transparent;
chart.Width = Unit.Pixel(250);
chart.Height = Unit.Pixel(100);

Series series1 = new Series("Series1");
series1.ChartArea = "ca1";
series1.ChartType = SeriesChartType.Pie;
series1.Font = new Font("Verdana", 8.25f, FontStyle.Regular);
series1.Points.Add(new DataPoint { 
                AxisLabel = "Value1", YValues = new double[] { value1 } });
series1.Points.Add(new DataPoint {
                AxisLabel = "Value2", YValues = new double[] { value2 } });
chart.Series.Add(series1);

ChartArea ca1 = new ChartArea("ca1");
ca1.BackColor = Color.Transparent;
chart.ChartAreas.Add(ca1);

using (var ms = new MemoryStream())
{
    chart.SaveImage(ms, ChartImageFormat.Png);
    ms.Seek(0, SeekOrigin.Begin);

    return File(ms.ToArray(), "image/png", "mychart.png");
}
Run Code Online (Sandbox Code Playgroud)

WebForms风格

这样,您只需在.aspx视图中包含图表(就像传统的Web表单一样).为此,您必须连接web.config中的相关位

<controls>
    ...
    <add tagPrefix="asp"
         namespace="System.Web.UI.DataVisualization.Charting"
         assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>

<httpHandlers>
    ...
    <add path="ChartImg.axd"
         verb="GET,HEAD"
         validate="false"
         type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>

<handlers>
    ...
    <add name="ChartImageHandler"
         preCondition="integratedMode" 
         verb="GET,HEAD"
         path="ChartImg.axd"
         type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
Run Code Online (Sandbox Code Playgroud)

在构建图表时,您无法在DataPoint元素内部运行代码,因此要连接数据,您需要View类中的方法.这对我来说没问题.以这种方式工作使控件呈现由图表控件http处理程序生成的图像的URL.在部署中,您需要为其提供可写文件夹以缓存图像.

*VS 2010/.NET 4支持*

要在.NET 4中使用此功能,您需要使用适当的公钥令牌将图表引用更改为版本4.0.0.0.

此外,图表控件现在似乎生成当前请求路径的URL而不是请求路径.对我来说,这意味着所有图表请求都会导致404错误,因为/{Controller}/ChartImg.axd路由阻止了等价物.为了解决这个问题,我添加了额外的IgnoreRoute调用来覆盖我的用法 - 更通用的解决方案会更好:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
    routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
    routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...
Run Code Online (Sandbox Code Playgroud)

  • +1 - 很好.2个小变化:`MemoryStream ms = new MemoryStream()`应该在`using'块中,而MVC控制器有返回文件的辅助方法 - 而不是`new FileStreamResult`你可以做`返回File(ms.ToArray() ,"image/png","mychart.png")` (12认同)
  • 我刚刚在我的博客上发布了一个更新的.net 4.0版本的图表样本,并投入了另外两个项目 - ChartsWithMVC和ChartsWithoutWebForms,它们基本上将图表渲染为图像并将其返回.http://develocity.blogspot.com/2010/04/aspnet-chart-controls-without-web-forms.html (4认同)

Sar*_*ath 12

对于想要使用Razor引擎对MVC 3进行图表控制的人,请参阅以下链接

如何使用带有Razor的MVC3的MS图表