Nowe asp.net kontrolki Wykresów - czy będą działać z MVC (w końcu)?

Scott Gu właśnie napisał o nowym zestawie kontroli Wykresów dystrybuowanych przez zespół. NET. Wyglądają niesamowicie: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx

Pytanie za milion dolarów brzmi :.. czy będą współpracować z MVC, a jeśli tak, to kiedy?

Author: Kyle West, 2008-11-26

6 answers

Możesz używać kontrolek wykresu na dwa sposoby:

Generowanie obrazu z kontrolera

Poprzez wygenerowanie wykresu i zwrócenie go jako obrazu z akcji (jak myślę odnosi się do Chatuman):

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 Style

W ten sposób po prostu dołączyć wykres w swoim .widoki aspx (podobnie jak w przypadku tradycyjnych formularzy internetowych). W tym celu musisz podłączyć odpowiednie bity w swojej sieci.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żesz uruchomić kodu wewnątrz Elementy DataPoint podczas budowania wykresu, więc aby podłączyć dane, potrzebujesz metody w klasie View. To mi pasuje. Działanie w ten sposób powoduje, że kontrolka renderuje adres URL do obrazu wygenerowanego przez kontrolkę wykresu http handler. Podczas wdrażania musisz podać folder z możliwością zapisu, aby mógł buforować obrazy.

* VS 2010/. Net 4 Support *

Aby to działało w. Net 4 musisz zmienić odniesienia do wykresu do wersji 4.0.0.0 z odpowiednim token klucza publicznego.

Wydaje się również, że kontrola wykresu generuje teraz adresy URL do bieżącej ścieżki żądania, a nie trasy żądania. Dla mnie oznaczało to, że wszystkie żądania wykresu powodowały 404 błędy, ponieważ /{Controller}/ChartImg.axd i odpowiedniki były blokowane przez trasy. Aby to naprawić dodałem dodatkowe IgnoreRoute wywołania, które obejmują moje zastosowania - 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}");
...
 94
Author: Simon Steele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-30 17:28:45

Dla ludzi, którzy chcą korzystać z kontroli Wykresów z MVC 3 za pomocą silnika Razor zobacz poniższy link

Jak używać MS Charts z MVC3 z Razor

 12
Author: Sarath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-25 16:09:44

Możesz już używać ich z MVC wszystko, co musisz zrobić, to renderować je jako obrazy

 2
Author: Chatu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-26 05:33:27

Zamiast tego stwórz Usercontrol i nadaj mu pełny obiekt wykresu i pozwól mu renderować go samodzielnie:

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

Nazwij to Wykres.ascx i umieść go w folderze Shared view.

Teraz otrzymasz wszystkie dodatkowe html, takie jak mapa obrazów itp. za darmo.. jak również buforowanie.

W Twoim kontrolerze:

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

Według Ciebie:

<% Html.RenderPartial("Chart", Model); %>
 1
Author: Carl Hörberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-25 11:40:02

Ten artykuł najlepiej mi się sprawdził:

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

Nie podaje błędów "Obiekt nie jest ustawiony na instancję obiektu" lub "identyfikator sesji był dostępny, ale strumień odpowiedzi został wypłukany"(nie jest to dokładne sformułowanie błędów).

Nie byłem skłonny po prostu renderować ich jako obraz, ponieważ jeśli robisz drilldowns, podpowiedzi lub inne akcje klikania na wykresie, to renderowanie jako obraz nic z tego nie zachowuje.

Kluczem do moich potrzeb było umieszczenie Wykresów w modelu, przekazanie modelu do widoku (lub częściowego widoku)i umieszczenie panelu asp: w widoku i dodanie Wykresów do panelu w widoku znaczniki.

Przy okazji, to było z VS.net 2008 i MVC 2 na Wrzesień. 3, 2010 (daty były czymś, co uznałem za ważne podczas wyszukiwania odpowiedzi ze względu na zmiany, które ciągle się dzieje w MVC).

 1
Author: Darryl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-03 16:29:00

Testowałem z MVC i do tej pory wygląda na to, że działa z MVC.

 0
Author: Picflight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 19:10:29