Nota: Este post ha sido importado de mi blog de geeks.ms. Es posible que algo no se vea del todo "correctamente". En cualquier caso puedes acceder a la versión original aquí
Supongo que la gran mayoría de vosotros, conoceréis los controles de gráficos de ASP.NET. José M. Aguilar hizo un excelente post sobre ellos aquí (http://geeks.ms/blogs/jmaguilar/archive/2008/12/14/microsoft-chart-control-para-asp-net-3-5-sp1.aspx).
Utilizarlos es realmente simple… basta con que os los descargueis de la web de Microsoft y después de instalarlos agregueis las siguiente líneas en el web.config
:
|
|
En la sección <httpHandlers>
y la siguiente:
|
|
En la sección <controls>
.
Despues ya podeis arrastrar un Chart control desde la toolbox a vuestra página ASP.NET y empezar a trabajar con él.
Si, como yo, os encanta ASP.NET MVC sabed que podeis usar este control sin ningún problema (http://code-inside.de/blog-in/2008/11/27/howto-use-the-new-aspnet-chart-controls-with-aspnet-mvc/).
El único temilla a tener en cuenta es si se quiere actualizar sólo el gráfico mediante Ajax (usando ASP.NET MVC).
Suponed una vista parcial (Chart.ascx) con el siguiente código que muestra un gráfico con contenido random:
|
|
Y otra vista (Victories.aspx) que contiene el siguiente código (entre otro):
|
|
El enlace “Actualizar” envia una petición Ajax al controlador actual para que invoque la acción “Victories” y con el resultado actualice el div “chart”.
La acción “Victories” está implementada en el controlador tal como sigue:
|
|
De este modo a cada click del enlace se genera un nuevo gráfico aleatorio y se actualiza via Ajax la página…
… en teoria, porque en la práctica no se ve nada. Analizando con firebug lo que ha sucedido se puede observar que se lanza una excepción:
[HttpException (0x80004005): Error executing child request for ChartImg.axd.]
La solución? Caer en la cuenta de que las peticiones Ajax usan POST por defecto, así que o bien cambiamos la línea que añadimos en el web.config para que soporte POST:
|
|
o bien le indicamos a la petición Ajax que sea usando “GET”:
|
|
Saludos!