graficas - Nuevos controles de gráficos asp.net: ¿funcionarán con MVC(eventualmente)?
graficas asp.net mvc (6)
Scott Gu acaba de publicar un nuevo conjunto de controles de gráficos distribuidos por el equipo de .NET. Se ven increíbles: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx
La pregunta del millón es ... ¿funcionarán con MVC, y si es así, cuándo?
Este artículo lo resolvió mejor para mí:
http://www.codecapers.com/post/Build-a-Dashboard-With-Microsoft-Chart-Controls.aspx
No da errores sobre ''Objeto no configurado para una instancia de un objeto'' o ''La id. De sesión estaba disponible pero la secuencia de respuesta se ha limpiado'' (no la redacción exacta de los errores).
No estaba dispuesto a simplemente renderizarlos como una imagen porque si estás haciendo profundizaciones o información sobre herramientas u otras acciones de clic en el gráfico, el renderizado como imagen no conserva nada de eso.
La clave para mis necesidades era poner las tablas en un modelo, pasar el modelo a la vista (o vista parcial) y poner un panel asp: en la vista y agregar la tabla (s) al panel en la vista margen.
Por cierto, esto fue con VS.net 2008 y MVC 2 el 3 de septiembre de 2010 (las fechas fueron algo que encontré importante cuando busqué respuestas debido a los cambios que continuamente le están ocurriendo a MVC).
He estado probando con MVC y hasta ahora parece que está funcionando con MVC.
Para las personas que quieran usar el control de gráficos con MVC 3 usando el motor Razor, consulte el siguiente enlace
Puede usar los controles de gráfico de dos maneras:
Generando la Imagen desde un Controlador
Al generar el gráfico y devolverlo como una imagen de una acción (como se refiere a Chatuman, creo):
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");
}
Estilo de WebForms
De esta manera, simplemente incluye el gráfico en sus vistas .aspx (al igual que con los formularios web tradicionales). Para esto, tendrás que conectar los bits relevantes en tu 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>
No puede ejecutar código dentro de los elementos de DataPoint al compilar el gráfico, por lo que para conectar sus datos necesitará un método en la clase View. Esto funciona bien para mi Trabajar de esta manera hace que el control represente una URL a una imagen generada por el controlador http de control de gráficos. En su implementación, deberá proporcionar una carpeta de escritura para que guarde en caché las imágenes.
* Compatibilidad con VS 2010 / .NET 4 *
Para que esto funcione en .NET 4, debe cambiar las referencias de gráfico a la versión 4.0.0.0 con el token de clave pública apropiado.
También parece que el control de gráfico ahora genera urls para la ruta de solicitud actual en lugar de la ruta de solicitud. Para mí, esto significaba que todas las solicitudes de gráficos /{Controller}/ChartImg.axd
errores 404 porque /{Controller}/ChartImg.axd
y los equivalentes estaban bloqueados por las rutas. Para solucionarlo, agregué llamadas IgnoreRoute adicionales que cubren mis usos: una solución más general sería mejor:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...
Realice un Usercontrol en su lugar y asígnele el objeto Chart completo y deje que se represente a sí mismo:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Web.UI.DataVisualization.Charting.Chart>" %>
<%
Model.Page = this.Page;
var writer = new HtmlTextWriter(Page.Response.Output);
Model.RenderControl(writer);
%>
asígnele el nombre Chart.ascx y póngalo en su carpeta de vista compartida.
ahora obtendrá todos los html adicionales, como mapas de imágenes, etc. de forma gratuita ... así como el almacenamiento en caché.
en tu controlador:
public ActionResult Chart(){
var c = new Chart();
//...
return View(c);
}
en su vista:
<% Html.RenderPartial("Chart", Model); %>
Ya puedes usarlos con MVC, todo lo que tienes que hacer es renderizarlos como imágenes