Новый asp.net элементы управления диаграммами - будут ли они работать с MVC (в конечном итоге)?



Скотт ГУ только что опубликовал о новом наборе элементов управления диаграммами, распространяемых командой .NET. Они выглядят невероятно: http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx



вопрос на миллион долларов ... будут ли они работать с MVC, и если да, то когда?

605   6  

6 ответов:

вы можете использовать элементы управления диаграммы двумя способами:

генерация изображения с контроллера

генерируя диаграмму и возвращая ее как изображение из действия (как говорит Чатуман, я думаю):

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

таким образом, вы просто включите график .aspx представления (так же, как с традиционными веб-формами). Для этого вам придется подключить соответствующие биты в сеть.конфигурации

<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>

вы не можете запускать код внутри элементов DataPoint при построении диаграммы, поэтому для подключения ваших данных вам понадобится метод в классе View. Это работает нормально для меня. При работе таким образом элемент управления отображает URL-адрес изображения, созданного обработчиком http элемента управления chart. В вашем развертывании вам нужно будет предоставить доступную для записи папку для кэширования изображений.

* VS 2010 / .NET 4 Поддержка *

чтобы получить эту работу в .NET 4 необходимо изменить ссылки на диаграмму на версию 4.0.0.0 с помощью соответствующего маркера открытого ключа.

также кажется, что элемент управления chart теперь генерирует URL-адреса для текущего пути запроса, а не маршрута запроса. Для меня это означало, что все запросы диаграммы привели к 404 ошибкам, потому что /{Controller}/ChartImg.axd и эквиваленты были перекрыты маршруты. Чтобы исправить это, я добавил дополнительные вызовы IgnoreRoute, которые охватывают мои обычаи - более общее решение было бы лучше:

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

для людей, которые хотят использовать управление диаграммами с MVC 3 с помощью Razor engine см. следующую ссылку

как использовать MS диаграммы с MVC3 с бритвой

вы уже можете использовать их с MVC все, что вам нужно сделать, это сделать их как изображения

вместо этого сделайте Usercontrol и дайте ему полный объект диаграммы, и пусть он отобразит его самостоятельно:

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

имя его график.ascx и поместите его в папку общего вида.

Теперь вы получите все дополнительные html, как изображения карты и т. д. бесплатно.. а также кэширование.

в вашем контроллере:

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

на ваш взгляд:

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

эта статья работала лучше всего для меня:

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

не дает ошибок о "объект не установлен на экземпляр объекта" или "идентификатор сеанса был доступен, но поток ответов был сброшен" (не точная формулировка ошибок).

Я не хотел просто отображать их как изображение, потому что если вы делаете детализацию или подсказки или другой щелчок действия на диаграмме, а затем рендеринг как изображение не сохраняет ничего из этого.

ключ для моих потребностей состоял в том, чтобы поместить диаграмму(ы) в модель, передать модель в представление (или частичное представление) и поместить панель asp:в представление и добавить диаграмму(ы) на панель в разметке представления.

кстати, это было с VS.net 2008 и MVC 2 сентября. 3, 2010 (даты было то, что я нашел важным при поиске ответов из-за изменений, которые постоянно происходят с MVC).

Я тестировал с MVC и до сих пор похоже, что он работает с MVC.

Comments

    Ничего не найдено.