Новые элементы управления настройками 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, и если да, то когда?

Ответ 1

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

Создание изображения с контроллера

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

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

Таким образом вы просто включаете диаграмму в свои .aspx-представления (как и в традиционных веб-формах). Для этого вам нужно подключить соответствующие биты в файле 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>

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

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

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

Также кажется, что теперь элемент управления диаграммой генерирует 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}");
...

Ответ 3

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

Ответ 4

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

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

назовите его Chart.ascx и поместите его в общую папку просмотра.

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

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

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

в вашем представлении:

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

Ответ 5

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

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

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

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

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

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

Ответ 6

Я тестировал MVC и до сих пор выглядит так, как будто он работает с MVC.