Można używać formantów wykres na dwa sposoby:
Generowanie obrazu z kontrolerem
Generując wykres i zwracając go jako obraz z działania (jak mówi Chatuman, myślę):
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");
}
WebForms Styl
W ten sposób wystarczy dołączyć wykres do swoich widoków .aspx (podobnie jak w przypadku tradycyjnych formularzy internetowych). W tym celu będziesz musiał podłączyć odpowiednie bity w 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>
Nie można uruchomić kod wewnątrz elementów DATAPOINT podczas budowania wykresu, tak aby podłączyć swoje dane musisz mieć metoda w klasie Widok. To działa dobrze dla mnie. Działanie w ten sposób sprawia, że formant renderuje adres URL do obrazu wygenerowanego przez program obsługi http kontrolera wykresu. We wdrożeniu musisz udostępnić zapisywalny folder, aby buforował obrazy.
* VS/.NET 4 Pomoc 2010 *
Aby uzyskać tej pracy w .NET 4, czego potrzeba, aby zmienić referencje wykresu wersji 4.0.0.0 z odpowiednim kluczem publicznym tokena.
Wygląda na to, że kontrolka wykresu generuje teraz adresy URL do bieżącej ścieżki żądania, a nie do trasy żądania. Dla mnie oznaczało to, że wszystkie żądania wykresów spowodowały błędy 404, ponieważ /{Controller}/ChartImg.axd
i ich odpowiedniki były blokowane przez trasy. Do tego dodałem dodatkowe połączenia IgnoreRoute które pokrywają swoje zwyczaje naprawić - bardziej ogólne rozwiązanie byłoby lepsze:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...
+1 - Nicea. 2 małe zmiany: 'MemoryStream ms = new MemoryStream()' powinien znajdować się w bloku 'using', a kontroler MVC ma pomocnicze metody zwracania plików - zamiast' new FileStreamResult' możesz zrobić 'return File (ms.ToArray() , "image/png", "mychart.png") ' – Keith
Dzięki @Keith, oba dobre punkty, więc zaktualizowałem odpowiedź. –
+1 za dobrą odpowiedź. Dzięki za poświęcenie czasu. – gyurisc