新的 asp.net 图表控件 - 它们会与 MVC 一起工作(最终)吗? [英] New asp.net charting controls - will they work with MVC (eventually)?

查看:29
本文介绍了新的 asp.net 图表控件 - 它们会与 MVC 一起工作(最终)吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Scott Gu just posted about a new set of charting controls being distributed by the .NET team. They look incredible: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx

百万美元的问题是……他们是否会使用 MVC,如果会,什么时候?

The million dollar question is ... will they work with MVC, and if so, when?

推荐答案

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

You can use the chart controls in two ways:

从控制器生成图像

通过生成图表并将其作为来自动作的图像返回(我认为 Chatuman 指的是):

By generating the chart and returning it as an image from an action (as Chatuman is referring to I think):

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

WebForms 样式

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

This way you just include the chart in your .aspx views (just like with traditional web forms). For this you'll have to hook up the relevant bits in your 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>

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

You can't run code inside the DataPoint elements when building the chart, so to hook up your data you'll need a method in the View class. This works ok for me. Working this way makes the control render a URL to an image generated by the chart control http handler. In your deployment you'll need to provide a writable folder for it to cache the images.

* VS 2010/.NET 4 支持 *

要使其在 .NET 4 中工作,您需要使用适当的公钥令牌将图表引用更改为 4.0.0.0 版.

To get this working in .NET 4 you need to change the chart references to version 4.0.0.0 with the appropriate public key token.

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

Also it seems that the chart control now generates urls to the current request path rather than the request route. For me this meant that all the chart requests resulted in 404 errors because /{Controller}/ChartImg.axd and equivalents were blocked by routes. To fix this I added extra IgnoreRoute calls that cover my usages - a more general solution would be better:

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

这篇关于新的 asp.net 图表控件 - 它们会与 MVC 一起工作(最终)吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆