2011-01-19 12 views
35

Relacionados con This topic Me pregunto si alguien ha hecho que la biblioteca Microsoft Charting funcione con Asp MVC 3 y Razor.Microsoft Charting, MVC 3 y Razor

Conozco el nuevo asistente de gráficos introducido, pero como es muy limitado, no es una opción.

Crear un método de acción que devuelva una imagen también es fácil, pero dado que toda la interactividad se rompe (incluso simples consejos sobre barras en un gráfico de barras), este método tiene varias limitaciones.

This example es probablemente el artículo más útil que he encontrado, pero todavía no puedo obtener un solo gráfico fácil de trabajar a pesar de que funciona al representar la imagen solo en un método de acción. También tengo las muestras funcionando bien bajo .net 4, pero obviamente esas no son muestras de MVC.

SO - ¿Alguien tiene Microsoft charting trabajando completamente en Asp MVC 3 con Razor y podría publicar un enlace a una solución completa?

Respuesta

14

Si se trata de información sobre herramientas y perforar hacia abajo que busca entonces aquí es una muestra. Intenté y trabajé como un encanto para mí. Necesita tener ImageMap vinculado con su imagen para tener interactividad.

MVC Charts with Interactivity

+0

Parece muy prometedor, ¡exactamente lo que estaba buscando! Voy a marcar esto como una respuesta por ahora y regresar si me encuentro con algún problema más adelante. ¡Gracias! – Victor

+0

¡Excelente! Con un pequeño ajuste, también funcionó con MVC3. ¡GRACIAS! –

1

Aquí habría una solución completa en CodeProject usando ASP.NET MVC 2 y los Controles de Microsoft: Trazando

Eso es probablemente tan bueno como se pone en el momento (al menos No pude encontrar nada que se ajuste mejor a sus requisitos), porque ASP.NET MVC 3 todavía es solo RTM y también lo es el motor de visión de afeitar. De todos modos, migrarlo de ASP.NET MVC 2 a 3 no es un gran problema. Cambiar el motor de visualización a la afeitadora sería un poco más de esfuerzo, pero el concepto general sigue siendo el mismo.

Yo diría "hazlo" y cuando te enfrentes a un problema concreto o tengas una pregunta, pregunta aquí.

actualización

Esta entrada de blog de Robert Muehsig cubre el tema, así y tiene una solución descargable. Basado en su comentario se parece más a lo que realmente quiere lograr:

+0

Gracias, por desgracia, esa solución es un ejemplo de "el camino más fácil", lo que significa que utilizan un simple cual significa que no hay interactividad. Más detalles aquí: http://www.4guysfromrolla.com/articles/081909-1.aspx - lo llaman "transmisión binaria", básicamente quiero que uno de los otros dos pueda tener, por ejemplo, información sobre herramientas que muestran el valor de cada punto de datos. – Victor

+0

@Victor: Veo su punto e hice una actualización de mi respuesta. Espero que ayude. –

+0

Gracias, eso es mucho más en la línea de lo que estoy buscando. Puedo hacerlo funcionar en VS 2010 al compilar para .net 3.5 y los controles de gráficos 3.5, sin embargo, todavía no puedo convertirlo para usar las versiones actualizadas (Razor o no). Puedo convertirlo para hacerlo compilar, pero aún obtengo muchas excepciones de referencia nulas cuando se ejecuta. Sin embargo, gracias por la actualización, la marcaré como la respuesta a menos que nadie tenga un enlace a una solución más actualizada. – Victor

12

yo pasamos unos días en busca de una solución que crea gráficos interactivos en MVC, pero todos los ejemplos que he visto eran mucho más complicadas de lo que tienen que ser.

La respuesta de Sarath es casi perfecta, pero guarda la imagen dos veces, lo que no es muy eficiente. Con la función Html.RenderAction() podemos hacer todo en una sola pasada y hacerlo lo más eficiente posible.

Aquí está la solución que se me ocurrió:

http://blog.smirne.com/2012/09/creating-interactive-charts-with-aspnet.html

no he visto ninguna solución que puede hacer todo en un solo paso. La mejor parte de esto es que no necesita ninguna modificación en el archivo web.config. Tampoco intenta usar un control ASP.net en MVC. Es pura tecnología MVC.

ACTUALIZACIÓN

Aquí está el código que solicitó:

controlador:

public ActionResult Chart() 
{ 
    var chart = buildChart(); 
    StringBuilder result = new StringBuilder(); 
    result.Append(getChartImage(chart)); 
    result.Append(chart.GetHtmlImageMap("ImageMap")); 
    return Content(result.ToString()); 
} 

funciones de utilidad:

private Chart buildChart() 
{ 
    // Build Chart 
    var chart = new Chart(); 

    // Create chart here 
    chart.Titles.Add(CreateTitle()); 
    chart.Legends.Add(CreateLegend()); 
    chart.ChartAreas.Add(CreateChartArea()); 
    chart.Series.Add(CreateSeries()); 

    return chart; 
} 

private string getChartImage(Chart chart) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     string img = "<img src='data:image/png;base64,{0}' alt='' usemap='#ImageMap'>"; 
     chart.SaveImage(stream, ChartImageFormat.Png); 
     string encoded = Convert.ToBase64String(stream.ToArray()); 
     return String.Format(img, encoded); 
    } 
} 

VISTA:

@{ Html.RenderAction("Chart"); } 
+1

¿Puedes publicar el código del ejemplo en tu enlace en tu respuesta? –

+0

Aquí está. ¡Espero que esto ayude! – smirne

Cuestiones relacionadas