Новые средства управления графиками asp.net - будут ли они работать с MVC (со временем)? - PullRequest
74 голосов
/ 26 ноября 2008

Скотт Гу только что опубликовал информацию о новом наборе элементов управления диаграммами, который распространяется командой .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, и если да, то когда?

Ответы [ 6 ]

94 голосов
/ 26 ноября 2008

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

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

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

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");
}

Стиль веб-форм

Таким образом, вы просто включаете диаграмму в свои представления .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}");
...
12 голосов
/ 25 февраля 2011

Для тех, кто хочет использовать управление графиками с MVC 3, используя движок Razor, смотрите следующую ссылку

Как использовать MS Charts с MVC3 с Razor

2 голосов
/ 26 ноября 2008

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

1 голос
/ 03 сентября 2010

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

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

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

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

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

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

1 голос
/ 25 апреля 2010

Вместо этого создайте 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); %>
0 голосов
/ 31 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...