Novos controles de charts do asp.net – eles funcionarão com o MVC (eventualmente)?

Scott Gu acabou de postar sobre um novo conjunto de controles de charts sendo distribuídos pela equipe do .NET. Eles parecem incríveis: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt. aspx

A questão do milhão de dólares é … eles vão trabalhar com o MVC e, em caso afirmativo, quando?

Você pode usar os controles do gráfico de duas maneiras:

Gerando a imagem de um controlador

Ao gerar o gráfico e devolvê-lo como uma imagem de uma ação (como Chatuman está se referindo a eu acho):

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

Dessa forma, você apenas inclui o gráfico em suas exibições .aspx (assim como nos formulários tradicionais da Web). Para isso você terá que ligar os bits relevantes em seu web.config

  ...    ...    ...   

Você não pode executar código dentro dos elementos do DataPoint ao criar o gráfico, portanto, para conectar seus dados, você precisará de um método na class View. Isso funciona bem para mim. Trabalhar dessa maneira faz com que o controle renderize uma URL para uma imagem gerada pelo manipulador http de controle de gráfico. Em sua implantação, você precisará fornecer uma pasta gravável para armazenar as imagens em cache.

* Suporte para VS 2010 / .NET 4 *

Para que isso funcione no .NET 4, você precisa alterar as referências do gráfico para a versão 4.0.0.0 com o token de chave pública apropriado.

Além disso, parece que o controle do gráfico agora gera urls para o caminho de solicitação atual em vez da rota de solicitação. Para mim, isso significava que todas as solicitações de gráfico resultavam em erros 404 porque /{Controller}/ChartImg.axd e equivalentes eram bloqueados por rotas. Para corrigir isso, adicionei chamadas IgnoreRoute extras que cobrem meus usos – uma solução mais geral seria melhor:

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

Para as pessoas que querem usar o controle de charts com o MVC 3 usando o mecanismo Razor, veja o seguinte link

Como usar o MS Charts com MVC3 com o Razor

Você já pode usá-los com o MVC, tudo que você precisa fazer é renderizá-los como imagens

Em vez disso, crie um Usercontrol, dê-lhe o object Chart completo e deixe-o auto-renderizar:

 < %@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> < % Model.Page = this.Page; var writer = new HtmlTextWriter(Page.Response.Output); Model.RenderControl(writer); %> 

nomeie-o como Chart.ascx e coloque-o na pasta Visualização compartilhada.

agora você terá todo o html extra, como o mapa de imagens, etc, de graça … assim como o cache.

no seu controlador:

 public ActionResult Chart(){ var c = new Chart(); //... return View(c); } 

na sua vista:

 < % Html.RenderPartial("Chart", Model); %> 

Este artigo funcionou melhor para mim:

http://www.codecapers.com/post/Build-a-Dashboard-With-Microsoft-Chart-Controls.aspx

Não fornece erros sobre “Objeto não configurado para uma instância de um object” ou “O ID da session estava disponível, mas o stream de resposta foi liberado” (não o texto exato dos erros).

Eu não estava disposto a apenas renderizá-los como uma imagem, porque se você está fazendo drill downs ou dicas de ferramentas ou outras ações de cliques no gráfico, renderizar como uma imagem não preserva nada disso.

A chave para minhas necessidades era colocar o (s) gráfico (s) em um modelo, passar o modelo para a visão (ou visão parcial) e colocar um painel asp: na visão e adicionar o (s) gráfico (s) ao painel na visão marcação.

By the way, isso foi com VS.net 2008 e MVC 2 em 03 de setembro de 2010 (datas foi algo que eu achei importante na busca de respostas por causa das mudanças que estão acontecendo continuamente ao MVC).

Eu tenho testado com MVC e até agora parece que está trabalhando com MVC.