Pregunta Nuevos controles de gráficos asp.net: ¿funcionarán con MVC (eventualmente)?


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?


74
2017-11-26 05:28


origen


Respuestas:


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 daban como resultado errores 404 porque /{Controller}/ChartImg.axd y los equivalentes fueron 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}");
...

94
2017-11-26 14:33



Para las personas que quieran usar el control de gráficos con MVC 3 usando el motor Razor, consulte el siguiente enlace

Cómo usar MS Charts con MVC3 con Razor


12
2018-02-25 16:09



Ya puedes usarlos con MVC, todo lo que tienes que hacer es renderizarlos como imágenes


2
2017-11-26 05:33



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); %>

1
2018-04-25 11:40



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).


1
2017-09-03 16:29



He estado probando con MVC y hasta ahora parece que está funcionando con MVC.


0
2017-07-31 19:10